HashMap以非连续顺序返回值

时间:2012-07-23 12:49:34

标签: java map hashmap

我在HashMap中使用不同的键插入四个值。 代码段:

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}

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

3 个答案:

答案 0 :(得分:14)

您可以使用LinkedHashMap instead,它将保留广告订单:

  

这个实现与HashMap的不同之处在于它维护着一个运行所有条目的双向链表。此链接列表定义迭代排序,通常将键插入到地图中的顺序(插入顺序)

您可以像这样修改代码:

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

//rest of the code is the same

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:0)

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

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


答案可以在how to sort Map values by key in Java中找到:

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

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