为什么我的TreeMap没有排序?

时间:2015-12-22 07:41:54

标签: 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.println("map : " + m);

我希望输出的排序方式如下:

  

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

但我得到了这个:

  

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

5 个答案:

答案 0 :(得分:17)

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

使用

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

表示不区分大小写的顺序。

答案 1 :(得分:2)

Javadoc说:

  

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

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

答案 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中包含构造函数:

     
      
  1. TreeMap()

  2.   
  3. TreeMap(Comparator comp)

  4.   
  5. TreeMap(Map m)

  6.   
  7. TreeMap(SortedMap sm)

  8.         

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

         

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

         

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

         

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

         

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

答案 4 :(得分:0)

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