2012-11-30 20 views
9

どのようにTreeMapソートですか?たとえば言うあなたは、次のマップを持っている:TreeMapそれはどのようにソートするのですか

TreeMap<String, Integer> treemap = new TreeMap<>(); 
treemap.put("lol", 1); 
treemap.put("Marc", 2); 
treemap.put("Jesper", 3); 

Iterator ittwo = treemap.entrySet().iterator(); 
    while (ittwo.hasNext()) { 
    Map.Entry pairs = (Map.Entry)ittwo.next(); 
    System.out.println(pairs.getKey() + " = " + pairs.getValue()); 
    ittwo.remove(); 
} 

これの出力は次のとおりです。だから、

Jesper = 3 
Marc = 2 
lol = 1 

そのではないアルファベット順に、それを何ですか?

答えて

23

アルファベット順ではありませんが、大文字/小文字の区別もあります。

TreeMap<String, Integer> treemap = new TreeMap<String, Integer>(); 
treemap.put("Lol", 1); 
treemap.put("Marc", 2); 
treemap.put("Jesper", 3); 
treemap.put("lol1", 1); 
treemap.put("marc1", 2); 
treemap.put("jesper1", 3); 

出力:だから

Jesper = 3 
Lol = 1 
Marc = 2 
jesper1 = 3 
lol1 = 1 
marc1 = 2 

、あなたがそれを必要としない場合は、カスタムのコンパレータを使用して、小文字で文字列を比較することができます:

TreeMap<String, Integer> treemap = new TreeMap<String, Integer>(new Comparator<String>() { 
    public int compare(String o1, String o2) { 
     return o1.toLowerCase().compareTo(o2.toLowerCase()); 
    } 
}); 
treemap.put("Lol", 1); 
treemap.put("Marc", 2); 
treemap.put("Jesper", 3); 
treemap.put("lol1", 1); 
treemap.put("marc1", 2); 
treemap.put("jesper1", 3); 

出力:

Jesper = 3 
jesper1 = 3 
Lol = 1 
lol1 = 1 
Marc = 2 
marc1 = 2 
+2

'new Comparator (){ public int compare(文字列o1、文字列o2){ return o1.compareToIgnoreCase(o2); } } ' – Shawn

2

Comparatorをコンストラクタを介して渡すので、キーの自然順序付けを使用して新しいTreeMapが構築されます。

Javaでは、自然順序とはlexicographicalを意味します。

1

実際に正しい出力が得られています。

J(uppercase J)>M(uppercase M)>l(lowercase l). 

大文字はTreeMapstated in the JavaDocとして小文字

5

よりlexcographically大きい「...そのキーの自然順序付けに従ってソートされています...」(強調は私です)。

したがって、あなたの結果は、下ケースlはUTF「アルファベット」で後の大文字Mある光の中で、正しいです。

デフォルトの動作をオーバーライドする場合は、ComparatorTreeMapコンストラクタに指定できます。

関連する問題