关于Collections.sort()排序的疑惑

来源:9-5 权限模块界面渲染

72fc5c0f8317

2018-03-01

这里的sort()是通过比较器重写的compare()方法,比较两对象的seq,返回一个int值并将它作为一个标记,然后rootList通过这些标记从小到大排序?  排序方法属于那种?

Collections.sort(tempList, aclModuleSeqComparator);


public Comparator<AclModuleLevelDto> aclModuleSeqComparator = new Comparator<AclModuleLevelDto>() {
   public int compare(AclModuleLevelDto o1, AclModuleLevelDto o2) {
       return o1.getSeq() - o2.getSeq();
   }
};

写回答

2回答

Jimin

2018-03-02

你好,这里需要具体说一下sort排序时的compare方法。排序底层封装时,相当于我们在排序时,最终要放到两个对象的对比上,而两个对象哪个在前哪个在后取决于这里compare的结果。至于谁在前谁在后,有个简单的方法,就是先写一个看看是否和预期一致,不一致时反过来就可以了。

有时,返回0时要考虑更细节的排序,就是引入更多字段参与排序。

这里的sort方法呢,通过compare方法允许调用者定义自己的排序规则,借助compare方法的返回值决定两个待排序对象的顺序。自己做一些通用的实现时也可以引入这种设计,把核心规则部分提出来,允许使用者自定义规则,当然这里也支持默认的规则。

0
1
72fc5c0f8317
非常感谢!
2018-03-02
共1条回复

72fc5c0f8317

提问者

2018-03-01

tempList打错成rootList

0
0

Java开发企业级权限管理系统

源于企业真实Java项目,涉及大量高级技巧,覆盖权限管理开发技术

2261 学习 · 1347 问题

查看课程