在最近的開發(fā)中,需要對一些數(shù)據(jù)對象按照某一規(guī)則進行排序的操作只祠,由于對象實例一般都是存放在List、Map等集合中扰肌,自然想到使用Collections類中的sort方法來對既定集合進行排序抛寝。下面通過Person類按照年齡age屬性的排序來說明Collections.sort的一般使用方法
1、基礎(chǔ)的Person類
? ? Person類
2、一般的輸出
不進行排序的List集合
輸出結(jié)果:
[Person [age=25, name=張三], Person [age=24, name=王五], Person [age=30, name=李四]]
結(jié)果很顯然盗舰,List集合中的對象是無序?qū)ο蟆?/p>
3晶府、增加Comparable接口的Person類并進行排序
使用Collections.sort()進行排序
在上述測試函數(shù)中,增加Collections.sort(personList)钻趋;編譯器會告知Person需要實現(xiàn)Comparable接口
為Person類實現(xiàn)Comparable接口川陆,并實現(xiàn)Comparable接口的compareTo方法
compareTo方法的返回值
輸出結(jié)果
[Person [age=24, name=王五], Person [age=25, name=張三], Person [age=30, name=李四]]
4、無法改變源文件的類如何進行排序
有些情況蛮位,在使用第三方j(luò)ar包時或者給定類不希望增加接口時较沪,如何通過進行排序?Colletions類中也提供了另外一種方式來進行排序失仁,即通過Comparator來實現(xiàn)
Comparator實現(xiàn)
輸出結(jié)果
[Person [age=24, name=王五], Person [age=25, name=張三], Person [age=30, name=李四]]
5尸曼、comparator 以及 comparable的區(qū)別
comparator:基礎(chǔ)類(Person類)不需要進行修改,符合POJO風(fēng)格萄焦,比較方法由排序者自行定義控轿,便于擴展
comparable接口:基礎(chǔ)類通過實現(xiàn)接口方法設(shè)定既定排序,擴展性差拂封,與基礎(chǔ)類耦合度太高
歡迎加入微信公眾號