我正在寻找具有键-值关联的Java类,但不使用哈希。这是我目前正在做的事情:
Hashtable
。Hashtable.entrySet()
。Map.Entry
为迭代器获取一个。Module
根据该值创建类型的对象(自定义类)。JPanel
。我会为此使用ArrayListor Vector
,但是稍后在代码中,我需要获取Module
给定Key
的对象,而无法使用ArrayListor
进行操作Vector
。
有谁知道一个免费的/开源的Java类可以做到这一点,还是一种从添加值中获取值的方式Hashtable?
我建议一个LinkedHashMap
或一个TreeMap。A LinkedHashMap
保持键的插入顺序,而a TreeMap
则通过元素Comparator
或Comparable
元素的自然顺序进行排序。
由于不必对元素进行排序,LinkedHashMap
因此在大多数情况下应更快。TreeMap有O(log n)表现为containsKey
,get
,put
,和remove
,根据的Javadoc
,而LinkedHashMap
是O(1)
对每个。
如果你的API仅期望可预测的排序顺序,而不是特定的排序顺序,请考虑使用这两个类实现的接口,NavigableMap
或SortedMap
。这样一来,你就不会将特定的实现泄漏到你的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集合中,哪个集合不允许重复,哪个集合还保留数据的插入顺序?