TreeSet中为什么就允许有重复的记录?
在HashSet中不能有重复记录,但是TreeSet就可以。它只要求放在其中的对象实现comparable接口。但不要求覆盖equals,hashCode方法。就算你覆盖了也没有用。
也就是说TreeSet不会调用equals,hashCode去比较元素是不是重复的。

解决方案 »

  1.   

    要求覆盖equals和hashCode(),你没覆盖它就没法检测object是否重复
      

  2.   

    TreeSet好像不允许有重复的记录吧
    LinkedList允许有个重复的记录
      

  3.   

    set是不允许有重复的,把代码铁出来看看
      

  4.   

    TreeSet不允许重复记录的啊 但是 元素是有序的
    HashSet是无顺序的List  有索引index所以 可以允许重复
    Set   是不允许有重复的List 实现的子类 ArrayList AbstractList Vector(线程安全的)
    Set  的实现子类 TreeSet HashSetMap
        子类:HashMap Hashtable  
         HashTable 允许空的key 但是 HashMap不允许 
      

  5.   

    set 是不容许有重复元素的
      

  6.   

    要你自己完成equal() method 在你自己定义的类中,然后才能放到TreeSet里面
      

  7.   

    有个优先级的问题,如果你实现comparable接口,程序会根据你实现的comparable的方法进行判断是否重复。
    如果没有实现comparable接口,则按照hashCode()和equals()方法判断是否重复。所以楼主可以试一下把comparable接口删除,再去覆盖hashCode()和equals()就会看到效果了。
      

  8.   

    我也遇到了TreeSet出现了重复的元素
    代码如下:Comparator<char[]> comparator = new Comparator<char[]>() {
    @Override
    public int compare(char[] o1, char[] o2) {
    // TODO Auto-generated method stub
    if( Arrays.equals(o1, o2) ){
    return 0;
    }
    else
    return 1;
    }
    };


    TreeSet<char[]> setOfTelNumber = new TreeSet<char[]>(comparator);在插入之后,有些重复还是会出现~想不明白为什么