Java TreeMap昇順|降順配列


import java.util.Comparator;
import java.util.TreeMap;
public class Main {
	public static void main(String[] args) {
		TreeMap map1 = new TreeMap();  //   TreeMap    
		TreeMap map2= new TreeMap(new Comparator(){
			 /* 
	         * 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インタフェース.また、これらのキーはすべて
互いに比較可能:マッピング内の任意の2つのキーについて
k 1和
k 2,実行
k 1.compareTo(k 2)は投げ出してはいけません
ClassCastException.ユーザーがこの制約に違反するキーをマッピングに追加しようとする場合(たとえば、ユーザーがキーが整数のマッピングに文字列キーを追加しようとする場合)、
put(Object key,Object value)呼び出しが投げ出されます
ClassCastException. 
TreeMap
public TreeMap(Comparator super K> comparator)

与えられた比較器に基づいてソートされる新しい、空のツリーマッピングを構築します.マッピングを挿入するすべてのキーは、所与の比較器で行う必要があります.
相互比較:マッピング内の任意の2つのキーについて
k 1和
k 2,実行
comparator.compare(k 1,k 2)は投げ出してはいけません
ClassCastException.ユーザーがこの制約に違反するキーをマッピングに挿入しようとすると、
put(Object key,Object value)呼び出しが投げ出されます
ClassCastException.
パラメータ:comparator-このマッピングをソートするために使用される比較器.パラメータが
nullでは、キーの自然な順序が使用されます.
JAva.utilインタフェースComparator
タイプパラメータ:T-このComparatorが比較できるオブジェクトタイプ
すべての既知の実装クラス:
Collator, RuleBasedCollator
compare
int compare(T o1,
            T o2)

並べ替えに使用する2つのパラメータを比較します.1番目のパラメータが2番目のパラメータより小さいか、等しいか、または大きいかによって、それぞれ負の整数、ゼロまたは正の整数が返されます.
前述の説明では、シンボルsgn(expression)はsignum数学関数を表し、expressionの値が負であるか、0であるか、正であるかによって、それぞれ−1、0または1を返す.
実装プログラムは、すべてのxおよびyに対して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-比較する2番目のオブジェクト.
戻り値:
1番目のパラメータが2番目のパラメータより小さいか、等しいか、または大きいかによって、それぞれ負の整数、ゼロまたは正の整数が返されます.
放出:ClassCastException-パラメータのタイプがこのComparatorを比較できない場合.