TreeSet中为什么就允许有重复的记录?

jerryqd 2009-04-01 06:25:54
TreeSet中为什么就允许有重复的记录?
在HashSet中不能有重复记录,但是TreeSet就可以。它只要求放在其中的对象实现comparable接口。但不要求覆盖equals,hashCode方法。就算你覆盖了也没有用。
也就是说TreeSet不会调用equals,hashCode去比较元素是不是重复的。
...全文
514 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
renhuihhh 2011-02-23
  • 打赏
  • 举报
回复
1楼说的 即是
安卓机器人 2011-02-23
  • 打赏
  • 举报
回复
详见JAVA API文档
mark2you 2011-02-22
  • 打赏
  • 举报
回复
我也遇到了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);

在插入之后,有些重复还是会出现~想不明白为什么
zhangpeixv 2009-04-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 gzwlj 的回复:]
有个优先级的问题,如果你实现comparable接口,程序会根据你实现的comparable的方法进行判断是否重复。
如果没有实现comparable接口,则按照hashCode()和equals()方法判断是否重复。

所以楼主可以试一下把comparable接口删除,再去覆盖hashCode()和equals()就会看到效果了。
[/Quote]
而且覆盖的时候条件一定是唯一的,可以确保没有重复记录
LZ还可以看看它的源码具体是怎么实现的也许会有帮助
gzwlj 2009-04-07
  • 打赏
  • 举报
回复
有个优先级的问题,如果你实现comparable接口,程序会根据你实现的comparable的方法进行判断是否重复。
如果没有实现comparable接口,则按照hashCode()和equals()方法判断是否重复。

所以楼主可以试一下把comparable接口删除,再去覆盖hashCode()和equals()就会看到效果了。
gloomyfish 2009-04-07
  • 打赏
  • 举报
回复
要你自己完成equal() method 在你自己定义的类中,然后才能放到TreeSet里面
铁匠梁老师 2009-04-06
  • 打赏
  • 举报
回复
4楼正解
挨踢民工_0917 2009-04-06
  • 打赏
  • 举报
回复
set 是不容许有重复元素的
热烈的红颜 2009-04-06
  • 打赏
  • 举报
回复
TreeSet不允许重复记录的啊 但是 元素是有序的
HashSet是无顺序的

List 有索引index所以 可以允许重复
Set 是不允许有重复的

List 实现的子类 ArrayList AbstractList Vector(线程安全的)
Set 的实现子类 TreeSet HashSet

Map
子类:HashMap Hashtable
HashTable 允许空的key 但是 HashMap不允许
lovetysx 2009-04-06
  • 打赏
  • 举报
回复
set是不允许有重复的,把代码铁出来看看
wenzheng38 2009-04-05
  • 打赏
  • 举报
回复
TreeSet好像不允许有重复的记录吧
LinkedList允许有个重复的记录
临远 2009-04-04
  • 打赏
  • 举报
回复
要求覆盖equals和hashCode(),你没覆盖它就没法检测object是否重复

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧