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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 坚强 黑马帝   /  2011-11-17 14:42  /  2189 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  有两种方式:1 对象中实现Comparable接口,重写compareTo()方法;2 自定义类实现Comparator,重写compare()方法,通过构造函数加载。
  我想知道这两个方法有什么不同?除了在TreeSet中的不同以外,在其他的地方还有哪些不同?

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

4 个回复

倒序浏览
1. Comparable 是在类的内部实现的,当类实现了Comparable接口时,该类的集合如ArrayList就可以通过ArrayList。Sort进行排序了。Comparator是在类外部重新实现一个比较器。
2. 如果某个类没有实现Comparable接口,而这个类又不是你自己写的无法更改其代码时,你可以自己写一个类实现Comparator接口,然后通过这个新的类进行比较。
3. Comparator可以实现多种比较方式,而Comparable 只能以一种方式进行比较。比如我们有Person类,有Age和Name属性。当实现Comparable 时我们可能只能制定通过Age或Name进行排序。然而我们却可以实现两个类:AgeComparator 和NameComparator 来达到根据不同情况对不同属性进行排序的效果。

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

回复 使用道具 举报
在内部实现的就相当于给这个TreeSet一种默认的排序方式,每次添加的时候它就会去比较一下,把要添加的东西放在相应的位置。而外部实现的,只有调用一次sort的时候,并给出外部的那个比较器,才按照外部的那个排。

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

回复 使用道具 举报
外部的排序比较灵活,只要在建立集合的时候传入想要用的比较器就可以了,不必在对象的内部就定义。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
坚强 黑马帝 2011-11-18 21:08:50
报纸
嗯 谢谢你们,我似乎明白了一点。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马