A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

刚才和舍友讨论treeset,它是通过什么方法来判断不可以有重复元素的?

我记得他里面应该有一个campatorTo的比较方法,它这个方法的默认比较是怎么样子的?

比如说我存两个自定义对象,不同的地址值当然可以存进去,那我是不是要重写这个方法才能可以限制这两个有相同属性的对象不能存进来?

求高人帮我理清思路。

我是问treeset的默认比较方法,不是自定义比较器!

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

2 个回复

倒序浏览
引用API回答你问题哈:
set 维护的顺序(无论是否提供了显式比较器)必须与 equals 一致。
(关于与 equals 一致 的精确定义,请参阅 Comparable 或 Comparator。)
这是因为 Set 接口是按照 equals 操作定义的,
但 TreeSet 实例使用它的 compareTo(或 compare)方法对所有元素进行比较,
因此从 set 的观点来看,此方法认为相等的两个元素就是相等的。
回复 使用道具 举报
保证元素唯一性的依据是compareTo方法返回0。返回1则比原来 的大,返回-1,则比原来小
treeSet排序的第一种方式:让元素自身具备比较性。元素需要实现comparable接口,重写compareTo方法。这种方式就是元素的自然顺序,或者叫默认数序。
treeSet排序的第二种方式:当元素自身不具备比较性,或具备的比较性不是所需要的,这时就需要集合自身具备比较性,在集合初始化时就有了比较性。
方法:定义一个比较器,把比较器对象作为参数传递给TreeSet的构造函数。

当你重写compareTo方法的时候,把返回值设为0 ,无论怎么样都是重复的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马