Comparable 和 Comparator的区别
2016-08-01 17:46
441 查看
在使用集合收集对象之后,如果相对对象进行排序,我们可以使用java.util.Collections中的sort()方法,因为必须有索引才能进行排序,所以Collections的sort()方法就受List操作对象。使用sort()方法只能按照它提供的排序方法对对象进行排序,如果想自己定义排序规则,可以操作java.util.Comparable中的compareTo()方法,或者java.util.Comparator接口中的compara()方法。
区别:
Comparable的compareTo()方法,必须在比较的对象内部定义重写该方法,比如String类本身有操作Comparable,进行下列排序
它会得到结果:A B X
如果此时需要进行逆序排序,则需要在String类内部重写compareTo()方法,所以使用compareTo()在一些情况下并不方便
Comparator接口中的compara()方法则没有该要求,它可以在另一个类中重写compara()方法,最后调用该类
在类valueSort中重写了compare()方法,然后使用Collections.sort(list, new valueSort())调用该类,对list进行排序
区别:
Comparable的compareTo()方法,必须在比较的对象内部定义重写该方法,比如String类本身有操作Comparable,进行下列排序
List words = Arrays.asList("B", "X", "A"); Collections.sort(words);
它会得到结果:A B X
如果此时需要进行逆序排序,则需要在String类内部重写compareTo()方法,所以使用compareTo()在一些情况下并不方便
Comparator接口中的compara()方法则没有该要求,它可以在另一个类中重写compara()方法,最后调用该类
List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet()); Collections.sort(list, new valueSort()); for (int i = 0; i < list.size(); i++) System.out.print(list.get(i).getKey()); class valueSort implements Comparator<Map.Entry<String, Integer>> { @Override public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) { if ((o1.getValue() - o2.getValue()) > 0) return -1; else if ((o1.getValue() - o2.getValue() == 0) && (o1.getKey().charAt(0) - o2.getKey().charAt(0) > 0)) return -1; return 1; } }
在类valueSort中重写了compare()方法,然后使用Collections.sort(list, new valueSort())调用该类,对list进行排序
相关文章推荐
- 干货:阿里云高级技术专家李金波:我们该如何做好一个数据仓库?
- HDU 1394 Minimum Inversion Number
- 信号量与PV操作
- PyQt5教程-09-事件与信号
- HBase 写优化之 BulkLoad 实现数据快速入库
- [leetcode] 44. Wildcard Matching
- memcached入门基础知识(2)
- 理解Linux文件权限
- 欧拉回路
- 基于 Quartz 开发企业级任务调度应用
- 很特别的一个动态规划入门教程:通过金矿模型介绍动态规划
- HTTP和TCP协议区别
- 树(理论篇)
- Apache POI(5):公式(formula)
- 继承
- 游戏性能优化技术干货分享——内存管理
- storm滑动时间窗口实现
- 中国这10家慕课网站,您需要知道
- listview失去焦点不能点击问题
- SG 函数 poj 1082 Calendar Game