Set是如何判断是否有重复元素 求详解

解决方案 »

  1.   

    hashCode和equals方法,在加入的时候判断,加入后就不判断了
      

  2.   

    Set只是接口。
    是无重复元素集合的一种抽象。
    如果楼主想问,如何实现无重复,
    那就要问具体的Set的实现类。
    比如,HashSet、TreeSet等等。
    HashSet是通过回调存入元素的equals方法,来区分元素是否相同的,
    当然,HashCode方法,加速了相同元素的比较过程。
    TreeSet是通过回调存入元素的compare方法,来区分元素是否相同的。
    compare方法将元素变成有序的集合。
      

  3.   

    貌似是compareTo方法,具体是哪个,楼主再查查好了。
    长时间不用,有些遗忘了。
      

  4.   

    通过hashCode的hash码进行判断的
      

  5.   

    HashSet是这样实现的: 先去目标元素x的hashCode 根据散列函数(取余)找到索引index,然后再index这个索引的链表中一次查找,查找的方法是:首先比较hashCode值,若不相等,说明两个对象肯定不相同,若相同再用equals()比较,按照这样的方法,直到遍历完或者发现重复我记得是这样,本人也初学JAVA  TreeSet 我猜想是根据比较器判断的吧,当中会选择是在左子树,还是在右子树中查找吧
      

  6.   

    set会判断
    list iterator不判断
      

  7.   

    那为什么网上很多人的回答都是用iterator()方法?不懂了
      

  8.   

    那只是它的迭代器,Set接口就是设计成无重复的,避免重复是通过hashCode和equals保证的。
      

  9.   

    实际上 HashSet 内部是靠着 HashMap 来实现的。
      

  10.   

    set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals(  
    )是判读两个set是否相等。 equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。   这是我网上找到的答案
      

  11.   

    iterator()不过是个迭代器,iterator()的作用不是判断重复而是遍历
      

  12.   

    我刚遇到这个问题,查了下java源码 set是接口,具体判断如何是否重复元素还得看其具体实现 hashset 和treeset实现原理不一样 但看hashset源码 hashset里面包装了一个hashmaphashset的功能都有hashmap实现 所以hashset判断重复是根据HashMap实现的
      

  13.   

    以HashSet为例,Person类中 (1)s1 = "李娜" 20 (2)s2 = "李娜" 20 (这里简写了)存入集合的时候,正常情况下是可以存入的,原因是在你用add方法添加的时候,add方法底层比较这两个对象的哈希值,而s1和s2的哈希值是不同的,所以就存入进去了,但是我们认为这两个对象是相同的,所以就要重写person类中的hashCde方法和equals方法,就可以只存入一个了。不知道你明白了吗?
      

  14.   

    iterator()不能判断重复这个我能理解,可是,set到底是怎么判断重复的,能说具体一点吗?
      

  15.   

    重写hashcode()和equals()方法
      

  16.   

    hashCode
    int hashCode()返回 set 的哈希码值。一个 set 的哈希码定义为此 set 中所有元素的哈希码和,其中 null 元素的哈希码定义为零。这就确保对于任意两个 set s1 和 s2 而言,s1.equals(s2) 就意味着 s1.hashCode()==s2.hashCode(),正如 Object.hashCode() 的常规协定所要求的那样。 equals
    boolean equals(Object o)比较指定对象与此 set 的相等性。如果指定的对象也是一个 set,两个 set 的大小相同,并且指定 set 的所有成员都包含在此 set 中(或者,此 set 的所有成员都包含在指定的 set 中也一样),则返回 true。此定义确保了 equals 方法可在不同的 set 接口实现间正常工作。 
      

  17.   

    http://blog.csdn.net/zhangerqing
    里面有专门介绍集合类的一篇,并且有详细说明:set是如何保证不重复的。