zoukankan      html  css  js  c++  java
  • 集合(5)

    容器选择

    取的元素很多,频繁的增删元素:linkedlist

    涉及到增删,不频繁:linkedlist,arraylist

    涉及到了增删,同时涉及到了查询:建议使用arraylist【一般情况增删不多,查询多】

    Set:没有顺序,元素不可以重复

    Set集合的功能和collection的功能是一致的。

    Set两大子类

    Hashset:底层数据结构是哈西表【hashset 中的顺序是按照哈希值的顺序存放的,与存的顺序无关】

    Treeset

    哈希值在比较的时候;如果哈希值相同会再判断元素对象是否相同(equals)。

    一般自定义的类通常要复写hashcode(),equals()【尤其是要加入到hashset里面的】

    HashSet删除和判断的依据:

    对于判断元素是否存在以及删除等操作,依赖的方法是元素的hashCode() 的equals();

    Arraylist判断元素是否存在以及删除,只依赖equals()【取决于数据结构】

    Hashset练习:姓名年龄相同为同一人

    class Person{
        String name;
        int age;
        Person(String name,int age)
        {
            this.name=name;
            this.age=age;
        }
        public int hashCode()
        {
            return name.hashCode()+age;
        }
        public boolean equals(Object obj)
        {
            Person p=(Person)obj;
            if(p.name==this.name&& p.age==this.age)
            {
                return true;
            }
            else{
                return false;
            }
            
        }
    }
    public class test{
        public static void main(String[] args)
        {
            HashSet hs = new HashSet();
            Person s1= new Person("zhangsan",12);
            Person s2= new Person("lisi",13);
            Person s3= new Person("zhangsan",12);
            hs.add(s1);
            hs.add(s2);
            Iterator it = hs.iterator();
            while(it.hasNext())
            {
                Person p=(Person) it.next();
                System.out.println(p.name+"***"+p.age);
                
            }
                    
            }
            
        }

    原理:hashTable在比较时先比较哈希码,如果哈希码相同就在调用equals方法,如果不相同就不会调用equals方法

    hashCode()中返回的hash值:

    name.hashCode()+age

    易出现两值不相同,但和相同的情况

    为了避免这种情况,通常age*39【乘的数任意】来保证哈希值的唯一性;

  • 相关阅读:
    二叉查找树
    huffman coding
    普通树与二叉树
    递归转循环的通法
    尾递归和JAVA
    编译器和解释器
    开天辟地-用visualstudio2010编写helloworld
    Android app targetSdk升级到27碰到的一个bug补充说明
    Android Studio修改Apk打包生成名称
    Glide3升级到Glide4碰到的问题汇总以及部分代码修改
  • 原文地址:https://www.cnblogs.com/excellencesy/p/8511154.html
Copyright © 2011-2022 走看看