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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yanqiuqiu 中级黑马   /  2015-1-26 11:25  /  1797 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

求各位指导,求解?

9 个回复

倒序浏览
记住自定义比较器就用后者,第一个是自身具备比较性
回复 使用道具 举报
其实我觉得并没有太大的区别吧  在判断时,需要分主要条件和次要条件,当主要条件相同时,再判断次要条件,按照次要条件排序
让元素自身具备比较性,需要元素对象实现Comparable接口,覆盖compareTo方法。
让集合自身具备比较性,需要定义一个实现了Comparator接口的比较器,并覆盖compare方法,并将该类对象作为实际参数传递给TreeSet集合的构造函数。
第二种方式较为灵活。当两个方法同时存在时以比较器为主。
回复 使用道具 举报
Comparable 是一个形容词,可比较的或者具有比较性的,就是说让集合中的元素对象变成可比较的,即:”我是一个集合中的元素,我是具有比较性的“。
Comperator是一个名词,比较器,就是让集合自己有比较元素的判断规则,即:”我是一个集合,我可以自己比较我的元素“。
回复 使用道具 举报
形容词那个是让你自己的类具备比较性,要复写compareTo
名词那个你自己定义一个比较器,要复写compare

比如说别人有个类用了形容词实现了排序
但是你不想用他的排序方式
这是你自己定义一个比较器implements名词那个接口,然后用你自己的比较方式排序
回复 使用道具 举报
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)方法
回复 使用道具 举报
帮顶 学习
回复 使用道具 举报
gecl 中级黑马 2015-1-26 21:26:27
8#
帮顶 学习
回复 使用道具 举报
我试一下,等会,想一下
回复 使用道具 举报
要使类具有比较性,就实现Comparable,重写compareTo和equals方法,
要往集合中传入比较器,就实现Comparator,复写compare方法;两者以集合中传入的比较器为主
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马