This question already has answers here:
Java Class that implements Map and keeps insertion order?
(9个答案)
1年前关闭。
我想将一个键,值对添加到哈希表(或任何其他集合)中,但必须保持插入顺序。我怎样才能做到这一点?
就像我将1作为键“1”添加为值,将2作为键并将“2”添加为值。
输出应为:
,即
因此,在这种情况下,您似乎需要
以下是说明差异的代码段;它还显示了一种遍历
上面代码段的输出是(as seen on ideone.com):
相关问题
Iterate Over Map iterating over and removing from a map
如果要在迭代时修改 map ,则需要使用其
类似问题
How to keep the order of elements in hashtable Does entrySet() in a LinkedHashMap also guarantee order? Java Class that implements Map and keeps insertion order? Ordered List Map implementation in Java
(9个答案)
1年前关闭。
我想将一个键,值对添加到哈希表(或任何其他集合)中,但必须保持插入顺序。我怎样才能做到这一点?
就像我将1作为键“1”添加为值,将2作为键并将“2”添加为值。
输出应为:
1:one
2:two
最佳答案
以下是一些重要 Map
实现的特征差异:
LinkedHashMap
:“具有可预测的迭代顺序,通常是将键插入到映射中的顺序(插入顺序)。” HashMap
:“不保证 map 的顺序” TreeMap
:“根据其键的自然顺序或Comparator
进行排序”SortedMap
因此,在这种情况下,您似乎需要
LinkedHashMap
。以下是说明差异的代码段;它还显示了一种遍历
Map
的所有条目的通用方法,以及如何使用接口(interface)引用对象使实现的选择具有很大的灵活性。import java.util.*;
public class MapExample {
public static void main(String[] args) {
populateThenDump(new HashMap<String,Integer>());
populateThenDump(new TreeMap<String,Integer>());
populateThenDump(new LinkedHashMap<String,Integer>());
}
static void populateThenDump(Map<String,Integer> map) {
System.out.println(map.getClass().getName());
map.put("Zero", 0);
map.put("One", 1);
map.put("Two", 2);
map.put("Three", 3);
map.put("Four", 4);
for (Map.Entry<String,Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + " => " + entry.getValue());
}
}
}
上面代码段的输出是(as seen on ideone.com):
java.util.HashMap // unordered, results may vary
Three => 3
Zero => 0
One => 1
Four => 4
Two => 2
java.util.TreeMap // ordered by String keys lexicographically
Four => 4
One => 1
Three => 3
Two => 2
Zero => 0
java.util.LinkedHashMap // insertion order
Zero => 0
One => 1
Two => 2
Three => 3
Four => 4
相关问题
Iterator
。 类似问题
关于java - 如何保持插入顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2973751/
10-13 03:25