如何使用集合维护插入顺序

我想将一个键值对添加到哈希表(或任何其他集合)中,但必须维护插入顺序。 我怎样才能做到这一点?

就像我将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 ….. 🙂