如何保持插入顺序

2022-09-01 10:12:27

我想将键值对添加到哈希表(或任何其他集合)中,但必须保持广告顺序。我该怎么做?

就像我将1作为键“一”作为值,2作为键,“二”作为值。

输出应为:

1:one
2:two

答案 1

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

  • LinkedHashMap:“具有可预测的迭代顺序[...]这通常是将键插入地图的顺序(插入顺序)。
  • HashMap:“对地图的顺序不作任何保证”
  • TreeMap:“根据其键的自然顺序排序,或按Comparator"

因此,在这种情况下,它看起来像是您需要的。LinkedHashMap

这里有一个片段来说明差异;它还显示了一种循环访问 的所有条目的常用方法,以及如何使用接口来引用对象,从而可以灵活地选择实现。Map

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 所示):

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

相关问题

类似问题


答案 2

对于哈希表,请使用LinkedHashMap类。