繁体   English   中英

为什么我的TreeMap没有排序?

[英]Why is my TreeMap not sorting?

我使用了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);

我希望输出像这样排序:

map:{Hello = 1,world = 2,Zertt = 5}

但相反,我得到了这个:

map:{Hello = 1,Zertt = 5,world = 2}

String s的自然顺序区分大小写,因此Zw之前出现(所有大写字母都在小写字母之前)。

使用

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

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

Javadoc说:

地图根据其的自然顺序进行排序,或者根据使用的构造函数在地图创建时提供的比较器进行排序。

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

如前所述,字符串自然顺序区分大小写。 但是,如果你想要insentive排序,你可以提供比较器作为TreeMap构造函数参数:

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

ps注意,当使用案例因果顺序键时也会比较insentive:

m.put("Hello", 1);
m.put("helLo", 6);

结果是6,关键是Hello

也许这些信息会有所帮助。

在类TreeMap中包含构造函数:

  1. TreeMap()

  2. TreeMap(比较器comp)

  3. TreeMap(地图m)

  4. TreeMap(SortedMap sm)

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

第二个构造函数创建一个空集合,其元素将根据法律进行排序,该法则在传输比较器中定义。

第三个构造函数基于现有Map创建TreeMap。

第四个构造函数基于现有的SortedMap创建一个TreeMap,其元素将根据法律传输的SortedMap进行排序。

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

树形图中的排序基于键的自然顺序而不是值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM