Java Comparable與Comparator的區別
Java的Comparator和Comparable當需要排序的集合或數組不是單純的數字型時,通常可以使用Comparator或Comparable,以簡單的方式實現對象排序或自定義排序。
一、Comparator 強行對某個對象collection進行整體排序的比較函數,可以將Comparator傳遞給Collections.sort或Arrays.sort。
接口方法:
1 int compare(T o1, T o2);
案例實現:
1 import java.util.Comparator;
2 import java.util.HashMap;
3
4 public class Pair implements Comparator<String> {
5
6 HashMap<String, Integer> base_map;
7
8 public Pair(HashMap<String, Integer> base_map) {
9 this.base_map = base_map;
10 }
11 @Override
12 public int compare(String arg0, String arg1) {
13 if (!base_map.containsKey(arg0) || !base_map.containsKey(arg1)) {
14 return 0;
15 }
16 if (base_map.get(arg0) < base_map.get(arg1)) {
17 return 1;
18 } else if (base_map.get(arg0) == base_map.get(arg1)) {
19 return 0;
20 } else {
21 return -1;
22 }
23 }
24
25
26 } 二、Comparable
強行對實現它的每個類的對象進行整體排序,實現此接口的對象列表(和數組)可以通過Collections.sort或Arrays.sort進行自動排序。
接口方法:
1 public int compareTo(T o);
案例代碼比較年齡:
1 class TestAge implements Comparable<Object>{
2
3 private int age;
4
5 public TestAge(int age){
6 this.age=age;
7 }
8 @Override
9 public int compareTo(Object o) {
10 return this.age -((TestAge)o).age ;
11 }
12
13 } 三、Comparator和Comparable的區別
一個類實現了Camparable接口則表明這個類的對象之間是可以相互比較的,這個類對象組成的集合就可以直接使用sort方法排序。
Comparator可以看成一種算法的實現,將算法和數據分離,Comparator也可以在下面兩種環境下使用:
1、類的設計師沒有考慮到比較問題而沒有實現Comparable,可以通過Comparator來實現排序而不必改變對象本身
2、可以使用多種排序標準,比如升序、降序等
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!