如何在放入java HashMap时避免重新排序项目

我正在创建一个新的Map并将字符串推入其中(没什么大不了的) – 但我注意到随着地图的增长,字符串正在被重新排序。 是否有可能停止这种重新排序,以便地图中的项目保留所放置的顺序?

Map x = new HashMap(); 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 entry : x.entrySet()) { System.out.println("IN THIS ORDER ... " + entry.getValue()); } 

如果您关心订单,可以使用SortedMap 。 实现接口的实际类(至少对于大多数场景)是TreeMap 。 或者, LinkedHashMap也保持其顺序,同时仍然使用基于散列表的容器。

您可以使用LinkedHashMap保留它。

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

下面就差异进行了很好的讨论: LinkedHashMap的实现与HashMap的不同之处是什么?

之前的答案是正确的,因为您应该使用维护排序的Map实现。 LinkedHashMap和SortedMap各自执行这些操作。

但是,要点是并非所有集合都维护订单,如果订单对您很重要,您应该选择适当的实现。 通用HashMaps不维护订单,不声明这样做,也不能设置这样做。