鍏堟潵鐪嬬湅榪?涓帴鍙e湪jdk API縐嶇殑瑙i噴錛?br /> Comparable:姝ゆ帴鍙e己琛屽瀹炵幇瀹冪殑姣忎釜綾葷殑瀵硅薄榪涜鏁翠綋鎺掑簭銆傝繖縐嶆帓搴忚縐頒負綾葷殑鑷劧鎺掑簭錛岀被鐨?compareTo 鏂規硶琚О涓哄畠鐨勮嚜鐒舵瘮杈冩柟娉曘?br />瀹炵幇姝ゆ帴鍙g殑瀵硅薄鍒楄〃錛堝拰鏁扮粍錛夊彲浠ラ氳繃 Collections.sort錛堝拰 Arrays.sort錛夎繘琛岃嚜鍔ㄦ帓搴忋傚疄鐜版鎺ュ彛鐨勫璞″彲浠ョ敤浣滄湁搴忔槧灝勪腑鐨勯敭鎴栨湁搴忛泦鍚堜腑鐨勫厓绱狅紝鏃犻渶鎸囧畾姣旇緝鍣ㄣ?br /> Comparator:寮鴻瀵規煇涓璞?collection 榪涜鏁翠綋鎺掑簭 鐨勬瘮杈冨嚱鏁般傚彲浠ュ皢 Comparator 浼犻掔粰 sort 鏂規硶錛堝 Collections.sort 鎴?Arrays.sort錛夛紝浠庤屽厑璁稿湪鎺掑簭欏哄簭涓婂疄鐜扮簿紜帶鍒躲傝繕鍙互浣跨敤 Comparator 鏉ユ帶鍒舵煇浜涙暟鎹粨鏋勶紙濡傛湁搴?set鎴栨湁搴忔槧灝勶級鐨勯『搴忥紝鎴栬呬負閭d簺娌℃湁鑷劧欏哄簭鐨勫璞?collection 鎻愪緵鎺掑簭銆?br /> 瀹炵幇姝ゆ帴鍙g殑瀵硅薄鍙互鐢ㄤ綔鏈夊簭鏄犲皠涓殑閿垨鏈夊簭闆嗗悎涓殑鍏冪礌錛屾棤闇鎸囧畾姣旇緝鍣ㄣ備粠榪欏彞璇濆彲浠ョ湅鍑烘垜浠箣鎵浠ュ彲浠ュ鏁板瓧鎴栬呭瓧姣嶈繘琛屾帓搴忚屼笉闇鍒跺畾姣旇緝鍣紝鏄洜涓哄湪JDK涓粬浠凡緇忓疄鐜頒簡Comparable鎺ュ彛,鎵浠ラ氳繃Collections.sort鍜?Arrays.sort鏂規硶鍙互緇欎粬浠寜鑷劧欏哄簭鎺掑簭錛屽綋鎴戜滑瑕佸涓涓嚜瀹氫箟瀵硅薄榪涜鎺掑簭鐨勬椂鍊欙紝涔熷彲浠ュ疄鐜癈omparable鎺ュ彛錛屽疄鐜板畠鐨刢ompareTo鏂規硶銆?br />
1 @Override
2 public int compareTo(User user) {
3 if(this == null || user == null || this.getAge() > user.getAge())
4 return 1;
5 if(this.getAge() < user.getAge())
6 return -1;
7 return 0;
8 }
濡傛灉璇ュ璞″皬浜庛佺瓑浜庢垨澶т簬鎸囧畾瀵硅薄錛屽垯鍒嗗埆榪斿洖璐熸暣鏁般侀浂鎴栨鏁存暟錛屽彲浠ラ氳繃榪斿洖鐨勫兼潵鎺у埗瀵硅薄鍦ㄩ泦鍚堢殑浣嶇疆錛屽彲浠ユ寜騫撮緞鐨勫皬鍒板ぇ鎺掑簭錛屼篃鍙互鎸夊勾榫勭殑澶у埌灝忔帓搴忋?br /> 濡傛灉瑕佺敤Comparator鎺ュ彛鏉ュ疄鐜板璞″湪闆嗗悎涓殑鎺掑簭錛岀洿鎺ュ湪瀵硅薄涓疄鐜癈omparator鎺ュ彛鏄笉璧蜂綔鐢ㄧ殑(閽堝TreeSet,涓嬫枃涓竴鏍鳳紝鍏跺畠鐨勯泦鍚堢被榪樻病鍙戠幇鍙互鍦ㄥ璞′腑瀹炵幇Comparator鏉ヨ繘琛屾帓搴?錛岄渶瑕佸彟澶栨柊寤轟竴涓被瀹炵幇Comparator鎺ュ彛錛岀劧鍚庨氳繃闆嗗悎鐨勬瀯閫犲嚱鏁頒紶鍒伴泦鍚堜腑錛屾墠浼氳搗浣滅敤錛岀洿鎺ョ湅TreeSet鐨勬簮浠g爜鍚с?br /> 1 int cmp;
2 Entry<K,V> parent;
3 // split comparator and comparable paths
4 Comparator<? super K> cpr = comparator;
5 if (cpr != null) {
6 do {
7 parent = t;
8 cmp = cpr.compare(key, t.key);
9 if (cmp < 0)
10 t = t.left;
11 else if (cmp > 0)
12 t = t.right;
13 else
14 return t.setValue(value);
15 } while (t != null);
16 }
17 else {
18 if (key == null)
19 throw new NullPointerException();
20 Comparable<? super K> k = (Comparable<? super K>) key;
21 do {
22 parent = t;
23 cmp = k.compareTo(t.key);
24 if (cmp < 0)
25 t = t.left;
26 else if (cmp > 0)
27 t = t.right;
28 else
29 return t.setValue(value);
30 } while (t != null);
31 }
32 Entry<K,V> e = new Entry<K,V>(key, value, parent);
33 if (cmp < 0)
34 parent.left = e;
35 else
36 parent.right = e;
37 fixAfterInsertion(e);
38 size++;
39 modCount++;
40 return null;
comparator鏄湪鏋勯燭reeSet瀵硅薄鐨勬椂鍊欎紶榪涘幓鐨勶紝鎵浠ュ鏋?/span>comparator涓簄ull錛屽畠灝變細鎸夌収Comparable鎺掑簭錛屽鏋滃璞℃病鏈夊疄鐜?/span>Comparable鎺ュ彛錛屽氨浼氭姏鍑哄紓甯革紝鎵浠ュ埌鐜板湪涓烘錛屾垜榪樻病鍙戠幇鐩存帴鍦ㄥ璞′腑瀹炵幇comparator鎺ュ彛鍙互鎺掑簭鐨勩傜湅瀹岃繖孌典唬鐮佹垜浠繕鍙互鍙戠幇濡傛灉瀵硅薄娌℃湁瀹炵幇Comparable鎺ュ彛鎴栬呮病鏈夐氳繃鏋勯犱竴涓互comparator涓烘帓搴忕殑闆嗗悎錛屾槸涓嶈兘鍦═reeSet鎴朤reeMap涓嬌鐢ㄧ殑(瀹為檯TreeSet灝辨槸閫氳繃TreeMap瀹炵幇鐨勶紝涓嶄簡瑙g殑鍙互鐪?/span>TreeSet鐨勬簮浠g爜)錛屾渶澶氬彧鑳芥坊鍔犱竴涓璞oot銆?br /> 1 Entry<K,V> t = root;
2 if (t == null) {
3 // TBD:
4 // 5045147: (coll) Adding null to an empty TreeSet should
5 // throw NullPointerException
6 //
7 // compare(key, key); // type check
8 root = new Entry<K,V>(key, value, null);
9 size = 1;
10 modCount++;
11 return null;
12 }
comparator鐨勭敤澶勫湪浜庡彲浠ラ氳繃涓嶅悓鐨?/span>comparator瀹炵幇綾?/span>錛屽湪涓嶉氱殑鏉′歡涓嬪鍦ㄩ泦鍚堜腑鐨勫璞℃寜涓嶅悓鐨勯『搴忚繘琛屾帓搴忥紝榪欐牱鍏呭垎鍒╃敤浜唈ava鐨勫鎬侊紝涔熻鎴戜滑鍦ㄧ紪紼嬬殑榪囩▼涓兘寰堝ソ鐨勮В鑰︺?br /> 鍒╃敤Arrays.sort(T[] a, Comparator<? super T> c)鍙互瀵規暟緇勮繘琛屾帓搴忥紝鍒╃敤Collections.sort(List<T> list, Comparator<? super T> c) 鍙互瀵瑰疄鐜頒簡list鎺ュ彛鐨勯泦鍚堣繘琛屾帓搴忥紝濡傛灉闇瑕佸Set榪涜鎺掑簭,鍙互鍏堟妸Set杞崲鎴怉rrayList錛岀劧鍚庡啀榪涜鎺掑簭銆?br /> 1 Set<User> users = new TreeSet<User>(new UserComparator());
2 User user = new User();
3 user.setAge(24);
4 user.setName("wenbo");
5 users.add(user);
6 User user1 = new User();
7 user1.setAge(23);
8 user1.setName("wenbo1");
9 users.add(user1);
10 List<User> useList = new ArrayList<User>(users);
11 Collections.sort(useList,new UserMaxComparator());
閫氳繃涓婇潰鐨勫垎鏋愶紝涓嶇煡閬撳ぇ瀹舵湁娌℃湁鐞嗚В榪?涓帴鍙o紝鎴戣涓哄鏋滈渶瑕佸涓涓璞¤繘琛屾帓搴忥紝寤鴻浣跨敤comparator鎺ュ彛錛屽洜涓哄畠鏇寸伒媧伙紝鎴栬鏁堢巼鏇撮珮銆?br />

]]>