This question already has answers here:
Java Class that implements Map and keeps insertion order?

(9个答案)


1年前关闭。




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

就像我将1作为键“1”添加为值,将2作为键并将“2”添加为值。

输出应为:
1:one
2:two

最佳答案

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

  • LinkedHashMap :“具有可预测的迭代顺序,通常是将键插入到映射中的顺序(插入顺序)。”
  • HashMap :“不保证 map 的顺序”
  • TreeMap :“根据其键的自然顺序或Comparator进行排序”
  • ,即 SortedMap

  • 因此,在这种情况下,您似乎需要LinkedHashMap

    以下是说明差异的代码段;它还显示了一种遍历Map的所有条目的通用方法,以及如何使用接口(interface)引用对象使实现的选择具有很大的灵活性。
    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());
            }
        }
    }
    

    上面代码段的输出是(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
  • 如果要在迭代时修改 map ,则需要使用其 Iterator

  • 类似问题
  • 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
  • 关于java - 如何保持插入顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2973751/

    10-13 03:25