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

实现Map并保持插入顺序的Java类?

任文乐
2023-03-14
问题内容

我正在寻找具有键-值关联的Java类,但不使用哈希。这是我目前正在做的事情:

  1. 将值添加到中Hashtable
  2. 获取的迭代器Hashtable.entrySet()
  3. 遍历所有值和:
  4. Map.Entry为迭代器获取一个。
  5. Module根据该值创建类型的对象(自定义类)。
  6. 将类添加到JPanel
  7. 显示面板。
    这样做的问题是我无法控制获取值的顺序,因此无法按给定顺序显示值(没有对顺序进行硬编码)。

我会为此使用ArrayListor Vector,但是稍后在代码中,我需要获取Module给定Key对象,而无法使用ArrayListor进行操作Vector

有谁知道一个免费的/开源的Java类可以做到这一点,还是一种从添加值中获取值的方式Hashtable?


问题答案:

我建议一个LinkedHashMap或一个TreeMap。A LinkedHashMap保持键的插入顺序,而a TreeMap则通过元素ComparatorComparable元素的自然顺序进行排序。

由于不必对元素进行排序LinkedHashMap因此在大多数情况下应更快。TreeMap有O(log n)表现为containsKeygetput,和remove,根据的Javadoc,而LinkedHashMapO(1)对每个。

如果你的API仅期望可预测的排序顺序,而不是特定的排序顺序,请考虑使用这两个类实现的接口,NavigableMapSortedMap。这样一来,你就不会将特定的实现泄漏到你的API中,之后便可以随意切换到这些特定的类或完全不同的实现。



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

  • 问题内容: 我想将一个键,值对添加到哈希表(或任何其他集合)中,但必须保持插入顺序。我怎样才能做到这一点? 就像我将1作为键“ 1”添加为值,将2作为键并将“ 2”添加为值。 输出应为: 问题答案: 以下是一些重要实现的特征差异: :“具有可预测的迭代顺序,通常是将键插入映射 的顺序 ( 插入顺序 )。” :“不保证地图的顺序” :“根据其键的自然顺序或按” 即是一个 因此,在这种情况下,您需要的

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

  • 我已经讨论了一些相关问题,比如如何确保java8流中的处理顺序?,我仍然不完全清楚输出元素的顺序。因此,请澄清我的以下疑问。 我认为至少在理论上(或根据java规范),它可以按1、2、3、4、5、6、7、8以外的随机顺序打印。我说得对吗? 还有一个相关的问题——遭遇订单保存的决定是在执行的哪个点做出的?更准确地说,在执行开始之前,是否通过检查源、中间操作和终端操作的特性来评估整个流水线的订单特性?

  • ...我正在尝试写一个我能写的最简单/优雅的解决方案(更喜欢不创建新的数组/列表,旋转多个元素等),下面是我的... ...我的提交失败了,因为我的第一个分区不是而是,所以在以后的分区中,我的第一次合并是而不是,因为我的算法没有保持左分区元素的顺序(即)。 我的算法从结束到开始迭代,不包括起始元素(枢轴)... ->数据透视为5,数据透视索引为7(超出界限) ->2不大于5,跳过 ->9大于5,透

  • 在Java集合中,哪个集合不允许重复,哪个集合还保留数据的插入顺序?