关于java:HashMap以非连续顺序返回值

HashMap returns value in non sequential order

我在HashMap中插入具有不同键的四个值。
代码片段:

1
2
3
4
5
6
HashMap<Integer, String> choice = new HashMap<Integer, String>();

choice.put(1,"1917");
choice.put(2,"1791");
choice.put(3,"1902");
choice.put(4,"1997");

但是当我打印那个地图值时,它返回的结果如下:

{4=1997, 1=1917, 2=1791, 3=1902}

如何按照插入/插入的顺序获取地图值?


您可以改为使用LinkedHashMap,这将保持插入顺序:

This implementation differs from HashMap in that it maintains a doubly-linked list running through all of its entries. This linked list defines the iteration ordering, which is normally the order in which keys were inserted into the map (insertion-order).

您可以像这样修改代码:

1
2
3
Map<Integer, String> choice = new LinkedHashMap<Integer, String>();

//rest of the code is the same


LinkedHashMap,可以使用Map接口的Hash表和链表实现。

它保持使用双向链表插入值的顺序相同。

参考:http://docs.oracle.com/javase/1.4.2/docs/api/java/util/LinkedHashMap.html


[编辑] OP要求的内容对我来说并不完全清楚。 OP可能会问:"如何按插入顺序从地图中检索项目?"如果这是OP的意思,那么以下信息不是解决方案。

如果OP询问,"如何从按键排序的哈希中检索项目?"然后以下是关键点。获取散列/关联数组的排序键是一种常见操作。

答案可以在如何按Java中的键对Map值进行排序中找到:

1
2
List sortedKeys=new ArrayList(yourMap.keySet());
Collections.sort(sortedKeys);

如果您关心存储和检索密钥的顺序,请考虑使用TreeMap。除非您拥有非常多的元素(数百万+),否则性能差异可能不太明显。