如何使用集合维护插入顺序
我想将一个键值对添加到哈希表(或任何其他集合)中,但必须维护插入顺序。 我怎样才能做到这一点?
就像我将1添加为键“一”作为值,2作为键和“两”作为值。
输出应按以下顺序排序:
1:one 2:two
以下是一些重要Map
实现的特征差异:
-
LinkedHashMap
:“具有可预测的迭代顺序[…],通常是键插入映射的顺序 ( 插入顺序 )。” -
HashMap
:“不保证地图的顺序” -
TreeMap
:“根据其键的自然顺序或Comparator
排序”- 即它是一个
SortedMap
- 即它是一个
所以在这种情况下看起来像LinkedHashMap
就是你需要的。
这是一个片段来说明差异; 它还显示了迭代Map
所有条目的常用方法,以及如何使用接口引用对象允许选择实现的极大灵活性。
import java.util.*; public class MapExample { public static void main(String[] args) { populateThenDump(new HashMap()); populateThenDump(new TreeMap()); populateThenDump(new LinkedHashMap()); } static void populateThenDump(Map 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 entry : map.entrySet()) { System.out.println(entry.getKey() + " => " + entry.getValue()); } } }
以上代码段的输出( 如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
。
- 如果要在迭代时修改地图,则需要使用其
类似的问题
- 如何在哈希表中保持元素的顺序
- LinkedHashMap中的entrySet()是否也保证了订单?
- 实现Map并保持插入顺序的Java类?
- Java中的有序列表映射实现
对于哈希表,请使用LinkedHashMap
类。
您的搜索结束于LinkedHashMap ….. 🙂