问题描述
TreeSet中为什么就允许有重复的记录?在HashSet中不能有重复记录,但是TreeSet就可以。它只要求放在其中的对象实现comparable接口。但不要求覆盖equals,hashCode方法。就算你覆盖了也没有用。也就是说TreeSet不会调用equals,hashCode去比较元素是不是重复的。
解决方案
解决方案二:
要求覆盖equals和hashCode(),你没覆盖它就没法检测object是否重复
解决方案三:
TreeSet好像不允许有重复的记录吧LinkedList允许有个重复的记录
解决方案四:
set是不允许有重复的,把代码铁出来看看
解决方案五:
TreeSet不允许重复记录的啊但是元素是有序的HashSet是无顺序的List有索引index所以可以允许重复Set是不允许有重复的List实现的子类ArrayListAbstractListVector(线程安全的)Set的实现子类TreeSetHashSetMap子类:HashMapHashtableHashTable允许空的key但是HashMap不允许
解决方案六:
set是不容许有重复元素的
解决方案七:
4楼正解
解决方案八:
要你自己完成equal()method在你自己定义的类中,然后才能放到TreeSet里面
解决方案九:
有个优先级的问题,如果你实现comparable接口,程序会根据你实现的comparable的方法进行判断是否重复。如果没有实现comparable接口,则按照hashCode()和equals()方法判断是否重复。所以楼主可以试一下把comparable接口删除,再去覆盖hashCode()和equals()就会看到效果了。
解决方案十:
引用8楼gzwlj的回复:
有个优先级的问题,如果你实现comparable接口,程序会根据你实现的comparable的方法进行判断是否重复。如果没有实现comparable接口,则按照hashCode()和equals()方法判断是否重复。所以楼主可以试一下把comparable接口删除,再去覆盖hashCode()和equals()就会看到效果了。
而且覆盖的时候条件一定是唯一的,可以确保没有重复记录LZ还可以看看它的源码具体是怎么实现的也许会有帮助
解决方案十一:
我也遇到了TreeSet出现了重复的元素代码如下:Comparator<char[]>comparator=newComparator<char[]>(){@Overridepublicintcompare(char[]o1,char[]o2){//TODOAuto-generatedmethodstubif(Arrays.equals(o1,o2)){return0;}elsereturn1;}};TreeSet<char[]>setOfTelNumber=newTreeSet<char[]>(comparator);在插入之后,有些重复还是会出现~想不明白为什么
解决方案十二:
详见JAVA API文档
解决方案十三:
1楼说的即是