黑马程序员技术交流社区

标题: 关于treeset如果限定不能存储重复元素和比较器 [打印本页]

作者: 黑马陈旭东    时间: 2012-6-6 17:57
标题: 关于treeset如果限定不能存储重复元素和比较器
刚才和舍友讨论treeset,它是通过什么方法来判断不可以有重复元素的?

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

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

求高人帮我理清思路。

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


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

当你重写compareTo方法的时候,把返回值设为0 ,无论怎么样都是重复的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2