当前位置: 首页 > 面试题库 >

如何保持插入顺序

花俊雄
2023-03-14
问题内容

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

就像我将1作为键“ 1”添加为值,将2作为键并将“ 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<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

相关问题

  • 遍历地图
  • 迭代并从地图中删除
    • 如果要在迭代时修改地图,则需要使用Iterator


 类似资料:
  • 问题内容: 以下代码以相同的插入顺序为我提供了输出。我阅读了Javadoc,他们甚至没有谈论插入顺序。有人可以帮助我获取正确的信息。 问题答案: 不,不是的。要保留插入顺序,请改用(javadoc)。 而且,现在优先于,因为它具有不必要的并发开销。(请参见HashMap和Hashtable之间的区别?。)

  • 问题内容: 为什么某些集合数据结构不能保持插入顺序?与保持插入顺序相比,有什么特别的事情?如果不维持订单,我们会有所收获吗? 问题答案: 性能。如果您想要原始的插入顺序,则可以使用LinkedXXX类,它们在插入顺序中维护着一个附加的链表。大多数时候,您都不在乎,因此您使用HashXXX,或者想要自然订单,因此您使用TreeXXX。在这两种情况下,您为什么都要支付链接列表的额外费用?

  • 问题内容: 我正在寻找具有键-值关联的Java类,但不使用哈希。这是我目前正在做的事情: 将值添加到中。 获取的迭代器。 遍历所有值和: 为迭代器获取一个。 根据该值创建类型的对象(自定义类)。 将类添加到。 显示面板。 这样做的问题是我无法控制获取值的顺序,因此无法按给定顺序显示值(没有对顺序进行硬编码)。 我会为此使用,但是稍后在代码中,我需要获取给定 的对象,而无法使用进行操作。 有谁知道一

  • LinkedHashMap将所有调用委托给其父HashMap。它还支持基于accessOrder值的访问顺序和插入顺序。如果accessOrder:true,则使用访问顺序,否则使用accessOrder:false插入顺序 公共LinkedHashMap(int初始容量、浮点加载因子、布尔访问顺序) 但LinkedHashMap如何在内部支持对象的访问顺序和插入顺序呢?

  • 问题内容: 以下SQL查询: 返回: 要添加一次,只需添加一次即可: 但是,结果值改变了顺序: 可能是什么原因呢? 我如何保留订单? 问题答案: 该关键字是做什么它应该做的事情,回报每一个行与给定的列值。不同不允许您指定 哪些 这样的行会被退回,这是从原来的查询,这样的排序是允许清楚(存在一个跟随ID为429的行ID为443行)。 要控制将返回哪些行,您需要重新构造查询。我将采用的典型解决方案是使

  • 问题内容: 使用SELECT WHERE IN()时,是否可以保持顺序?例如,使用以下查询: 结果将使用ID的默认顺序返回。1,7,54,55,56 当我想保留IN中使用的顺序时:56,55,54,1,7 有没有一种快速的方法可以在MySQL中执行此操作,或者我将被迫在代码后对其进行排序? 问题答案: 使用FIND_IN_SET: