黑马程序员技术交流社区

标题: 怎样区分集合中的Comparable和Comparator? [打印本页]

作者: yanqiuqiu    时间: 2015-1-26 11:25
标题: 怎样区分集合中的Comparable和Comparator?
求各位指导,求解?
作者: hanjun    时间: 2015-1-26 17:01
记住自定义比较器就用后者,第一个是自身具备比较性
作者: 我为你着迷    时间: 2015-1-26 17:11
其实我觉得并没有太大的区别吧  在判断时,需要分主要条件和次要条件,当主要条件相同时,再判断次要条件,按照次要条件排序
让元素自身具备比较性,需要元素对象实现Comparable接口,覆盖compareTo方法。
让集合自身具备比较性,需要定义一个实现了Comparator接口的比较器,并覆盖compare方法,并将该类对象作为实际参数传递给TreeSet集合的构造函数。
第二种方式较为灵活。当两个方法同时存在时以比较器为主。

作者: 天堂雨    时间: 2015-1-26 17:29
Comparable 是一个形容词,可比较的或者具有比较性的,就是说让集合中的元素对象变成可比较的,即:”我是一个集合中的元素,我是具有比较性的“。
Comperator是一个名词,比较器,就是让集合自己有比较元素的判断规则,即:”我是一个集合,我可以自己比较我的元素“。
作者: xiaoyi    时间: 2015-1-26 17:57
形容词那个是让你自己的类具备比较性,要复写compareTo
名词那个你自己定义一个比较器,要复写compare

比如说别人有个类用了形容词实现了排序
但是你不想用他的排序方式
这是你自己定义一个比较器implements名词那个接口,然后用你自己的比较方式排序
作者: llkk11000    时间: 2015-1-26 20:44
Comparable在java.lang包中, 是个形容词  给类实现用的  以表示这个类的对象具有可比较性(什么是可比较性 就是能Collections.sort或者装进二叉树)
   实现此接口的类必须重写compareTo(Object o)方法  方法的表现形式为 先判null再判是不是同一类型 然后return this.field - o.field
Comparator在java.util包中, 是个名词   Comparator是比较器类要实现的接口, 而比较器是要传入TreeSet TreeMap的构造方法中的   用来定义所属这个泛型的TreeSet的对象的排序方式   可以用比较器的实例对象传 也可以直接new Comparator(){重写方法}传匿名内部类
    实现此接口的比较器必须重写compare(Object o1 , Object o2)方法
作者: huyang936    时间: 2015-1-26 21:16
帮顶 学习
作者: gecl    时间: 2015-1-26 21:26
帮顶 学习
作者: 秦文强    时间: 2015-1-26 21:44
我试一下,等会,想一下
作者: yueye13    时间: 2015-1-26 23:25
要使类具有比较性,就实现Comparable,重写compareTo和equals方法,
要往集合中传入比较器,就实现Comparator,复写compare方法;两者以集合中传入的比较器为主




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