4

我在 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}

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

4

3 回答 3

18

您可以使用 a LinkedHashMapinstead,这将保持插入顺序:

此实现与 HashMap 的不同之处在于它维护一个双向链表,该列表贯穿其所有条目。这个链表定义了迭代顺序,通常是键插入映射的顺序(插入顺序)

您可以像这样修改您的代码:

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

//rest of the code is the same
于 2012-07-23T12:55:47.727 回答
2

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

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

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

于 2012-07-23T13:02:38.293 回答
0

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

如果 OP 询问“如何从按键排序的哈希中检索项目?” 那么以下是正确的。获取散列/关联数组的排序键是一种常见操作。


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

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

如果您关心密钥的存储和检索顺序,请考虑使用 aTreeMap代替。除非您有大量元素(数百万以上),否则性能差异可能不会很明显。

于 2012-07-23T12:57:15.903 回答