web-dev-qa-db-ja.com

ツリーマップはどのように並べ替えますか

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

それで、アルファベット順でない場合、それは何ですか?

17
Marc Rasmussen

アルファベット順だけでなく、大文字と小文字も区別されます。

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
33
kornero

JavaDocに記載 a TreeMap "...は、そのキーの自然順序付けに従ってソートされます... "(強調は私のものです)。

したがって、小文字lafter大文字Mであるという観点から、UTF "アルファベット"の結果は正しいです。

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

5

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

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

実際には正しい出力を取得しています。

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

大文字は辞書的に小文字よりも大きい

1
PermGenError