关于java:如何维护插入顺序

How to Maintain order of insertion


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


就像我将1添加为键"一"作为值,2作为键和"两"作为值。


输出应该是:

1
2
1:one
2:two


以下是一些重要的Map实现的特征差异:

  • LinkedHashMap:"具有可预测的迭代顺序[...],通常是将键插入到地图中的顺序(插入顺序)。"
  • HashMap:"不保证地图的顺序"
  • TreeMap:"根据其键的自然顺序或Comparator进行排序"

    • 即它是SortedMap


所以看起来LinkedHashMap就是你需要的东西。


这是一个说明差异的片段;它还显示了迭代Map的所有条目的常用方法,以及使用接口引用对象的方式允许选择实现的极大灵活性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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上所示):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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类。