1. 程式人生 > >Java TreeMap 升序|降序排列

Java TreeMap 升序|降序排列

import java.util.Comparator;
import java.util.TreeMap;
public class Main {
	public static void main(String[] args) {
		TreeMap<Integer,Integer> map1 = new TreeMap<Integer,Integer>();  //預設的TreeMap升序排列
		TreeMap<Integer,Integer> map2= new TreeMap<Integer,Integer>(new Comparator<Integer>(){
			 /* 
	         * int compare(Object o1, Object o2) 返回一個基本型別的整型, 
	         * 返回負數表示:o1 小於o2, 
	         * 返回0 表示:o1和o2相等, 
	         * 返回正數表示:o1大於o2。 
	         */  
			public int compare(Integer a,Integer b){
				return b-a;			
			}
			});
		map2.put(1,2);
		map2.put(2,4);
		map2.put(7, 1);
		map2.put(5,2);
		System.out.println("Map2="+map2);  
		
		map1.put(1,2);
		map1.put(2,4);
		map1.put(7, 1);
		map1.put(5,2);
		System.out.println("map1="+map1);
	}
	
	
	
	
}

分析:可以通過自定義compare函式,來實現各種型別的排序。

以下內容取至Api:

TreeMap

public TreeMap()
使用鍵的自然順序構造一個新的、空的樹對映。插入該對映的所有鍵都必須實現 Comparable 介面。另外,所有這些鍵都必須是可互相比較的:對於對映中的任意兩個鍵 k1k2,執行 k1.compareTo(k2) 都不得丟擲 ClassCastException。如果使用者試圖將違反此約束的鍵新增到對映中(例如,使用者試圖將字串鍵新增到鍵為整數的對映中),則 put(Object key, Object value) 呼叫將丟擲 ClassCastException
。 

TreeMap

public TreeMap(Comparator<? super K> comparator)
構造一個新的、空的樹對映,該對映根據給定比較器進行排序。插入該對映的所有鍵都必須由給定比較器進行相互比較:對於對映中的任意兩個鍵 k1k2,執行 comparator.compare(k1, k2) 都不得丟擲 ClassCastException。如果使用者試圖將違反此約束的鍵放入對映中,則 put(Object key, Object value) 呼叫將丟擲 ClassCastException
引數:
comparator - 將用來對此對映進行排序的比較器。如果該引數為 null
,則將使用鍵的自然順序

java.util
介面 Comparator<T>

型別引數:
T - 此 Comparator 可以比較的物件型別

compare

int compare(T o1,
            T o2)
比較用來排序的兩個引數。根據第一個引數小於、等於或大於第二個引數分別返回負整數、零或正整數。

在前面的描述中,符號 sgn(expression) 表示 signum 數學函式,根據 expression 的值為負數、0 還是正數,該函式分別返回 -101

實現程式必須確保對於所有的 xy 而言,都存在 sgn(compare(x, y)) == -sgn(compare(y, x))。(這意味著當且僅當 compare(y, x) 丟擲異常時 compare(x, y) 才必須丟擲異常。)

實現程式還必須確保關係是可傳遞的:((compare(x, y)>0) && (compare(y, z)>0)) 意味著 compare(x, z)>0

最後,實現程式必須確保 compare(x, y)==0 意味著對於所有的 z 而言,都存在 sgn(compare(x, z))==sgn(compare(y, z))

雖然這種情況很普遍,但並 嚴格要求 (compare(x, y)==0) == (x.equals(y))。一般說來,任何違背這個條件的 Comparator 都應該清楚地指出這一事實。推薦的語言是“注意:此 Comparator 強行進行與 equals 不一致的排序。”

引數:
o1 - 要比較的第一個物件。
o2 - 要比較的第二個物件。
返回:
根據第一個引數小於、等於或大於第二個引數分別返回負整數、零或正整數。
丟擲:
- 如果引數的型別不允許此 Comparator 對它們進行比較。