18

並べ替えはどう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

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

4

4 に答える 4

34

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

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
于 2012-11-30T09:53:11.933 に答える
7

JavaDoc に記載されているように、「 ...キーTreeMapの自然な順序に従ってソートされます...」(強調は私のものです)。

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

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

于 2012-11-30T09:53:54.817 に答える
2

Comparatorコンストラクターを介して何も渡さなかったので、これTreeMapはそのキーの自然な順序付けを使用して new を構築します。

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

于 2012-11-30T09:53:16.470 に答える
2

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

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

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

于 2012-11-30T09:53:24.813 に答える