Java 为什么我的树形图没有排序?

Java 为什么我的树形图没有排序?,java,treemap,Java,Treemap,我使用了一个TreeMap,其中键是String,值的类型是Integer。当我输出Map对象时,它没有按排序顺序打印 以下是我使用的代码: TreeMap<String, Integer> m = new TreeMap<String, Integer>(); m.put("Hello", 1); m.put("world", 2); m.put("Zertt", 5); m.put("Hello", 1); m.put("world", 2); System.out.

我使用了一个
TreeMap
,其中键是
String
,值的类型是
Integer
。当我输出
Map
对象时,它没有按排序顺序打印

以下是我使用的代码:

TreeMap<String, Integer> m = new TreeMap<String, Integer>();
m.put("Hello", 1);
m.put("world", 2);
m.put("Zertt", 5);
m.put("Hello", 1);
m.put("world", 2);
System.out.println("map : " + m);
TreeMap m=newtreemap();
m、 放入(“你好”,1);
m、 put(“世界”,2);
m、 put(“Zertt”,5);
m、 放入(“你好”,1);
m、 put(“世界”,2);
System.out.println(“映射:+m”);
我希望输出按如下方式排序:

地图:{Hello=1,world=2,Zertt=5}

但我得到的却是:

地图:{Hello=1,Zertt=5,world=2}


String
s的自然顺序区分大小写,因此
Z
w
之前(所有大写字母在所有小写字母之前)

使用

TreeMap m=newtreemap(String.CASE不区分大小写\u顺序);

对于不区分大小写的顺序。

树映射中的排序基于键的自然顺序,而不是值

说:

映射根据其键的自然顺序进行排序,或者由映射创建时提供的比较器进行排序,具体取决于使用的构造函数


编辑:Eran的答案是正确的,字符串顺序默认区分大小写。

正如在字符串自然顺序区分大小写之前回答的那样。但是,如果您想要不敏感的排序,您可以提供comparator作为TreeMap构造函数参数:

Map<String, Integer> m = new TreeMap<String, Integer>(String.CASE_INSENSITIVE_ORDER);

结果是6,键是
Hello

也许这个信息会有帮助

在类TreeMap中包含构造函数:

  • 树映射()

  • 树映射(比较器comp)

  • 树形图(地图m)

  • 树状图(分类图sm)

  • 第一个构造函数创建一个集合,其中包含所有元素 按其键的自然顺序进行排序

    第二个构造函数创建一个空集合,即 将根据法律进行分类,法律在 传输比较器

    第三个构造函数基于现有映射创建树映射

    第四个构造函数基于现有的SortedMap创建树映射, 其中的元素将根据传输的法律进行排序 分类地图

    请注意,用于排序的键,而不是值

    Map<String, Integer> m = new TreeMap<String, Integer>(String.CASE_INSENSITIVE_ORDER);
    
    m.put("Hello", 1);
    m.put("helLo", 6);