如何使用集合来维护插入顺序 [英] How to Maintain order of insertion using collections

查看:118
本文介绍了如何使用集合来维护插入顺序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I want to add a key,value pair into a hashtable (or any other collection) but have to maintain insertion order. How can I do this?

像我添加1作为键值1作为值,2作为键,2作为值。

Like I'll add 1 as key "one" as value, 2 as key and "two" as value.

输出应该按以下顺序排列:

The output should be ordered as:

1:one
2:two


推荐答案

以下是一些重要的 地图 实现:

Here are the characteristic differences of some important Map implementations:


  • LinkedHashMap :具有可预测的迭代顺序[...]键插入地图(插入顺序)。

  • HashMap :不保证地图的顺序 / li>
  • TreeMap :根据其键的自然排序,或通过比较器

    • LinkedHashMap: "with predictable iteration order [...] which is normally the order in which keys were inserted into the map (insertion-order)."
    • HashMap: "makes no guarantees as to the order of the map"
    • TreeMap: "is sorted according to the natural ordering of its keys, or by a Comparator"
      • i.e. it's a SortedMap

      所以看起来像 LinkedHashMap 是您在这种情况下需要的。

      So it looks like LinkedHashMap is what you need in this case.

      这是一个用来说明差异的代码段;它还显示了一种常见的方法来遍历 Map 的所有条目,以及如何使用接口引用对象,从而允许选择实现的极大灵活性。

      Here's a snippet to illustrate the differences; it also shows a common way to iterate over all entries of a Map, and how using an interface to refer to objects allow great flexibility of choice of implementation.

      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上所见):

      The output of the above snippet is (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
      



      相关问题




      • 迭代映射

      • 试图从地图上移除


        • 如果要在迭代时修改地图,则需要使用其 迭代器

        • Related questions

          • Iterate Over Map
          • iterating over and removing from a map
            • If you want to modify the map while iterating, you'd need to use its 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

              这篇关于如何使用集合来维护插入顺序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆