我使用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}
答案 0 :(得分:17)
String
s的自然顺序区分大小写,因此Z
位于w
之前(所有大写字母都位于所有小写字母之前)。
使用
TreeMap<String, Integer> m = new TreeMap<String, Integer>(String.CASE_INSENSITIVE_ORDER);
表示不区分大小写的顺序。
答案 1 :(得分:2)
答案 2 :(得分:1)
如前所述,字符串自然顺序区分大小写。但是,如果你想要insentive排序,你可以提供比较器作为TreeMap构造函数参数:
Map<String, Integer> m = new TreeMap<String, Integer>(String.CASE_INSENSITIVE_ORDER);
P.S。请注意,当使用案例提交顺序键时,也会比较insentive:
m.put("Hello", 1);
m.put("helLo", 6);
结果为6,密钥为Hello
答案 3 :(得分:1)
也许这些信息会有所帮助。
在类TreeMap中包含构造函数:
TreeMap()
TreeMap(Comparator comp)
TreeMap(Map m)
- 醇>
TreeMap(SortedMap sm)
第一个构造函数创建一个集合,其中包含所有元素 按其按键的自然顺序排序。
第二个构造函数创建一个空集合,即元素 将根据法律对其进行分类 传输比较器。
第三个构造函数基于现有Map创建TreeMap。
第四个构造函数基于现有的SortedMap创建一个TreeMap, 其中的元素将根据传输的法律进行分类 SortedMap的。
请注意用于排序的键,而不是值。
答案 4 :(得分:0)
树形图中的排序基于键的自然顺序而不是值。