您好,登錄后才能下訂單哦!
使用Java怎么實現一個比較器?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
Java的特點有哪些 1.Java語言作為靜態面向對象編程語言的代表,實現了面向對象理論,允許程序員以優雅的思維方式進行復雜的編程。 2.Java具有簡單性、面向對象、分布式、安全性、平臺獨立與可移植性、動態性等特點。 3.使用Java可以編寫桌面應用程序、Web應用程序、分布式系統和嵌入式系統應用程序等。
Java 比較器
Java 中有兩種比較器的實現方式:Comparable(內部比較器) 與 Comparator(外部比較器)。
3.1 Comparable 接口
代碼模板:
public class Entity implements Comparable<Entity> { @Override public int compareTo(Entity o) { return 0; } }
Comparable 接口支持泛型參數,所以一個需要比較實體類只需要按照上面的代碼模板實現 Comparable 接口,即可對傳入的另一個同類型的實體類進行比較啦。
因為比較方法是定義在實體類中,所以把它叫做內部比較器。
3.2 Comparator 接口
代碼模板:
public class EntityComparator implements Comparator<Entity> { @Override public int compare(Entity o1, Entity o2) { return 0; } }
Comparator 接口同樣也支持泛型參數。不同的是它是一個比較器類,所以叫它外部比較器。比較器類使用更靈活,我們可以定義多個比較器類用于不同的排序場景。
4 實戰
因為業務場景需要先對【狀態】分組排序后,然后再對【時長】排序,而【時長】的排序又可分為正序與逆序兩種,所以我們采用 Java 外部比較器來實現該業務邏輯。
待比較的實體類:
public class Record { //狀態 private String state; //時長 private String time; public Record(String state, String time) { this.state = state; this.time = time; } public String getState() { return state; } public String getTime() { return time; } @Override public String toString() { return "Record{" + "state='" + state + '\'' + ", time='" + time + '\'' + '}'; } }
比較器 A:先對【狀態】排序,然后再對【時長】按正序排序
public class RecordComparator implements Comparator<Record> { @Override public int compare(Record o1, Record o2) { final int stateCompare = o1.getState().compareTo(o2.getState()); if (stateCompare == 0) { return o1.getTime().compareTo(o2.getTime()); } return stateCompare; } }
比較器 B:先對【狀態】排序,然后再對【時長】按逆序(倒序)排序
public class RecordTimeDescComparator implements Comparator<Record> { @Override public int compare(Record o1, Record o2) { final int stateCompare = o1.getState().compareTo(o2.getState()); if (stateCompare == 0) { return o2.getTime().compareTo(o1.getTime()); } return stateCompare; } }
單元測試:
Record record1 = new Record("通話中", "00:01:08"); Record record2 = new Record("空閑", "00:18:02"); Record record3 = new Record("通話中", "00:04:04"); Record record4 = new Record("空閑", "00:01:57"); List<Record> recordList = new ArrayList<>(); recordList.add(record1); recordList.add(record2); recordList.add(record3); recordList.add(record4); System.out.println("排序前:" + recordList); Collections.sort(recordList, new RecordComparator()); System.out.println("排序后【時間正序】:" + recordList); recordList = new ArrayList<>(); recordList.add(record1); recordList.add(record2); recordList.add(record3); recordList.add(record4); System.out.println("排序前:" + recordList); Collections.sort(recordList, new RecordTimeDescComparator()); System.out.println("排序后【時間倒序】:" + recordList);
輸出結果:
排序前:[Record{state='通話中', time='00:01:08'}, Record{state='空閑', time='00:18:02'}, Record{state='通話中', time='00:04:04'}, Record{state='空閑', time='00:01:57'}]
排序后【時間正序】:[Record{state='空閑', time='00:01:57'}, Record{state='空閑', time='00:18:02'}, Record{state='通話中', time='00:01:08'}, Record{state='通話中', time='00:04:04'}]
排序前:[Record{state='通話中', time='00:01:08'}, Record{state='空閑', time='00:18:02'}, Record{state='通話中', time='00:04:04'}, Record{state='空閑', time='00:01:57'}]
排序后【時間倒序】:[Record{state='空閑', time='00:18:02'}, Record{state='空閑', time='00:01:57'}, Record{state='通話中', time='00:04:04'}, Record{state='通話中', time='00:01:08'}]
看完上述內容,你們掌握使用Java怎么實現一個比較器的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。