如何使用集合来维护插入顺序 [英] How to Maintain order of insertion using collections
问题描述
我想将一个键,值对添加到散列表(或任何其他集合)中,但必须维护插入顺序。如何做到这一点?
I want to add a key,value pair into a hashtable (or any other collection) but have to maintain insertion order. How can I do this?
像我添加1作为键值1作为值,2作为键,2作为值。
Like I'll add 1 as key "one" as value, 2 as key and "two" as value.
输出应该按以下顺序排列:
The output should be ordered as:
1:one
2:two
推荐答案
以下是一些重要的 地图
实现:
Here are the characteristic differences of some important Map
implementations:
-
LinkedHashMap
:具有可预测的迭代顺序[...]键插入地图(插入顺序)。 -
HashMap
:不保证地图的顺序 / li>
-
TreeMap
:根据其键的自然排序,或通过比较器
- ie这是一个
SortedMap
LinkedHashMap
: "with predictable iteration order [...] which is normally the order in which keys were inserted into the map (insertion-order)."HashMap
: "makes no guarantees as to the order of the map"TreeMap
: "is sorted according to the natural ordering of its keys, or by aComparator
"- i.e. it's a
SortedMap
所以看起来像
LinkedHashMap
是您在这种情况下需要的。So it looks like
LinkedHashMap
is what you need in this case.这是一个用来说明差异的代码段;它还显示了一种常见的方法来遍历
Map
的所有条目,以及如何使用接口引用对象,从而允许选择实现的极大灵活性。Here's a snippet to illustrate the differences; it also shows a common way to iterate over all entries of a
Map
, and how using an interface to refer to objects allow great flexibility of choice of implementation.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()); } } }
以上代码片段的输出是(如ideone.com上所见):
The output of the above snippet is (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
相关问题
- 迭代映射
- 试图从地图上移除
- 如果要在迭代时修改地图,则需要使用其
迭代器
。 - Iterate Over Map
- iterating over and removing from a map
- If you want to modify the map while iterating, you'd need to use its
Iterator
. - 如何保持哈希表中元素的顺序
- <一个href =http://stackoverflow.com/questions/1190083/does-entryset-in-a-linkedhashmap-also-guarantee-order> LinkedHashMap中的entrySet()是否也保证命令?
- 实现Map并继续插入订单的Java类?
- Java中的有序列表映射实现
- 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
这篇关于如何使用集合来维护插入顺序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
- If you want to modify the map while iterating, you'd need to use its
Related questions
- 如果要在迭代时修改地图,则需要使用其
- i.e. it's a
- ie这是一个