hashset如何保证元素不重复

hashset如何保证元素不重复

问:hashset如何保证元素唯一性的呢
  1. 答:首先,HashSet的底层数据结构是哈希表。哈希表就是存储一系列哈希值的表,而哈希值是由对象的hashCode()方法生成的。
    确保元素唯一性的两个方法,hashCode()和equals()方法。
    当调用add()方法向集合中存入对象的时候,先比较此对象与原有对象的哈希值有没有一样的,如果都不一样就直接存入;如果有与之相同的哈希值,则要继续比较这两个对象是否为同一个对象,此时就要调用对象的equals()方法了。
    总之,只有HashCode的至相同时,才会调用equals()方法。
    在判断元素是否存在和删除一个元素的时候,也是这个过程。
问:Set集合,放的元素不能重复,请问它的判断重不重复是怎么实现的?
  1. 答:回答者说的大多是对的 但是对set插入数据的描述是不正确的,对于初级java程序员可能就误导了。
    纠正一下:
    set中插入数据时,先比较hashCode:
    1.如果hashCode相同才会比较equals,equals相同,则两个对象相同,不能插入,equals不同,可以插入;
    2.如果hashCode不同,就直接插入了,两个对象hashCode不相等,他们equals一定是false。
问:java 集合set类中是如何实现数据不能重复的?
  1. 答:set 接口得到的就是不重复的数据,如果你插入了相同的会抛出异常的
  2. 答:用Set的contains方法判断就可以了 你试试~
  3. 答:通过计算HashCode实现的
  4. 答:通过计算HashCode实现的
  5. 答:set可以过滤在其他集合中的元素,从而得到一个不重复的集合。
  6. 答:Set 有个 add 方法是将元素添加到 Set 中,以 HashSet 为例。
    public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }
    可以看到,HashSet 底层的数据结构是一个HashMap<E,Object> ,将 e 作为 HashMap 的 key 保存的。而 HashMap 的底层数据结构是 HashTable ,根据 HashMap 的 key 的HashCode 去 HashTable (具体实现是数组+链表) 里找到元素的位置。如果同一个对象(使用equals 来比较两个对象是否相同,具体是比较对象的 hashCode() 是否相同) 往Set 里放,最终放到 HashTable 的位置是相同的。具体判断Set 是否包含某个对象,调用的是Set的contains(Object o) 方法,它内部也是通过计算 o 的hashCode 去查找该元素是否存在的。
    如果题主是新学习Java的同学,建议重点学习一下常用集合的数据结构,对于掌握Java这门语言非常有帮助。
hashset如何保证元素不重复
下载Doc文档

猜你喜欢