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}
如何按照插入/插入的顺序获取地图值?
-
如果您希望按键排序地图,则可以使用TreeMap。 这样,无论您添加的顺序如何,都可以获得1,2,3,4作为键。 我使用LinkedHashMap而不是HashMap,因为它更容易调试。 例如 当你添加一个键时,它总是在最后。;)
-
可能重复的java:HashMap迭代器顺序
您可以改为使用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是一个很好的解决方案,因为它在基本操作(添加,删除,包含)上提供O(1)性能,这与您对术语Linked的期望相反。大'O'表示法和Java恒定时间表现。
LinkedHashMap,可以使用Map接口的Hash表和链表实现。
它保持使用双向链表插入值的顺序相同。
参考:http://docs.oracle.com/javase/1.4.2/docs/api/java/util/LinkedHashMap.html
[编辑] OP要求的内容对我来说并不完全清楚。 OP可能会问:"如何按插入顺序从地图中检索项目?"如果这是OP的意思,那么以下信息不是解决方案。
如果OP询问,"如何从按键排序的哈希中检索项目?"然后以下是关键点。获取散列/关联数组的排序键是一种常见操作。
答案可以在如何按Java中的键对Map值进行排序中找到:
如果您关心存储和检索密钥的顺序,请考虑使用TreeMap。除非您拥有非常多的元素(数百万+),否则性能差异可能不太明显。
-
错误的建议。 OP对插入顺序感兴趣。
-
这将基于键的自然顺序(这里是整数的升序)排序,而不是基于插入顺序。
-
评论员是正确的,我的建议是错误的。我在这里有点新鲜:当一个人发错了答案时,首选的行动是什么?
-
@JeffBenshetler如果你认为它对未来的用户有用(例如,这是一个常见的错误),你可以编辑你的答案并添加一个说明,解释它为什么不起作用。否则,您只需删除答案即可。在这种情况下,似乎你的答案是基于一个误解,所以你可能只是删除它。
-
@JeffBenshetler除非你认为OP(原始海报)意味着按其键排序的地图(问题不是100%清楚)。