我正在创建一个新的Map并将字符串推入其中(没什么大不了的) - 但我注意到随着地图的增长,字符串正在被重新排序。是否可以停止这种重新排序,以便地图中的项目保留所放置的顺序?
Map<String,String> x = new HashMap<String, String>();
x.put("a","b");
x.put("a","c");
x.put("a","d");
x.put("1","2");
x.put("1","3");
x.put("1","4");
//this shows them out of order sadly...
for (Map.Entry<String, String> entry : x.entrySet()) {
System.out.println("IN THIS ORDER ... " + entry.getValue());
}
答案 0 :(得分:16)
如果您关心订单,可以使用SortedMap
。实现接口的实际类(至少在大多数情况下)是TreeMap
。或者,LinkedHashMap
也保持其顺序,同时仍然使用基于散列表的容器。
答案 1 :(得分:8)
您可以将其与LinkedHashMap
保持一致。
答案 2 :(得分:6)
java中的HashMap未按http://download.oracle.com/javase/1,5.0/docs/api/java/util/HashMap.html排序。如果您想要可预测的迭代顺序,请使用LinkedHashMap:http://download.oracle.com/javase/1.4.2/docs/api/java/util/LinkedHashMap.html
对差异进行了很好的讨论:How is the implementation of LinkedHashMap different from HashMap?
答案 3 :(得分:4)
之前的答案是正确的,因为您应该使用维护排序的Map实现。 LinkedHashMap和SortedMap各自执行这些操作。
然而,要点是并非所有馆藏都维持秩序,如果订单对您很重要,您应该选择合适的实施方案。 Generic HashMaps不维护订单,不声明这样做,也不能设置这样做。