javahasht顺序_Java集合维护插⼊顺序
性能。 如果您想要原始⼴告订单,则会有LinkedXXX类,它们按照⼴告订单维护额外的链接列表。 ⼤部分时间你不关⼼,所以你使⽤HashXXX,或者你想要⼀个⾃然的顺序,所以你使⽤TreeXXX。 在这两种情况下,为什么要⽀付链表的额外费⽤?
集合不保持插⼊的顺序。 有些只是默认添加⼀个新的值在最后。 维护插⼊的顺序只有在按照优先顺序排列对象或者以某种⽅式对对象进⾏sorting时才有⽤。
奶粉过敏都有哪些症状⾄于为什么有些集合默认维护它,其他集合则不是这样,这主要是由实现导致的,有时只是集合定义的⼀部分。
列表维护插⼊顺序,只是在最后添加⼀个新条⽬,或者开始是add(Object)⽅法的最快实现。
梦见买蛋糕
集 HashSet和TreeSet实现不维护插⼊顺序,因为对象被快速查找sorting,并且维护插⼊顺序将需要额外的内存。 这导致性能增益,因为插⼊顺序对于集合来说⼏乎是不感兴趣的。
ArrayDeque deque可以⽤于简单的que和stack,所以你想要“先进先出”或者“先进后出”的⾏为,都要求ArrayDeque维护插⼊顺序。 在这种情况下,插⼊订单被保持为类合同的中⼼部分。海洋科普知识
散光是怎么形成的送男生生日礼物送什么好
插⼊顺序本来就不在哈希表中维护 – 这是他们如何⼯作(阅读链接到的⽂章,了解细节)。 可以添加逻辑来维护插⼊顺序(如在LinkedHashMap ),但需要更多代码,并且在运⾏时需要更多的内存和更多的时间。 性能损失通常不显着,但可以。
垂直同步英文对于TreeSet/Map ,使⽤它们的主要原因是在SortedSet/Map接⼝中添加的⾃然迭代顺序和其他function。
取决于你需要什么执⾏才能做好。 插⼊顺序通常不是很有意思,所以不需要维护,所以可以重新排列以获得更好的性能。
对于地图,通常是使⽤HashMap和TreeMap。 通过使⽤散列码,条⽬可以放在⼀个容易arch的⼩组中.ShitMap以较慢的arch为代价维护插⼊条⽬的sorting顺序,但是⽐HashMap更容易sorting。
当你使⽤⼀个HashSet(或⼀个HashMap)数据存储在“桶”基于你的对象的散列。 这样你的数据更容易访问,因为你不必在整个集合中查找这个特定的数据,你只需要在正确的桶中查找。
这样可以提⾼特定点的performance。
每个集合实现都有其特殊性,以便在特定条件下使⽤更好。 每⼀个特点都有成本。 因此,如果您不需要它(例如插⼊顺序),则最好使⽤不提供它的实现,并且更符合您的要求。
为什么需要维护插⼊的顺序? 如果您使⽤HashMap ,您可以通过key获取input。 这并不意味着它不提供你想要的东西。
Theres在O'Reilly的Java Cookbook中的⼀段名为“避免sorting的冲动”你应该问的问题实际上与你原来的问题相反……“我们通过sorting获得了什么? 分类和维护这个订单需要花费很多的精⼒。 确定sorting很容易,但通常在⼤多数程序中不能缩放。 如果你要每秒处理数千或数万的请求(insrt,del,get等),不pipe你使⽤的是sorting还是⾮sorting的数据结构,都是⾮常重要的。
⼀些Collection由于不维护顺序,他们计算内容的hashCode并将其存储在相应的bucket中。
我⽆法引⽤参考,但通过devi, Collection接⼝的List和Set实现基本上是可扩展的Array 。 由于默认情况下提供的⽅法dynamic地添加和删除任何点上的元素 – 哪些Array没有 – 插⼊顺序可能不会保留。 因此,由于内容操作有更多的⽅法,因此需要特殊的实现来保持顺序。
杏仁油还有⼀点是性能,因为performance最好的Collection可能不是那个,它保留了它的插⼊顺序。 但我不确定, Collections如何pipe理其内容以提⾼性能。
所以,总之,我能想到为什么有顺序保存的Collection实现的两个主要原因是:
陈德权
类架构
性能
好吧…所以这些post与现在相⽐是旧的,但根据您的需要或应⽤程序的要求,插⼊顺序是需要的,所以只需使⽤正确的收集types。 ⼤多数情况下,这是不必要的,但是在需要按照存储顺序使⽤对象的情况下,我看到了⼀个确定的需求。 我认为当你创build⼀个向导或stream引擎的实例时,或者你需要从⼀个状态到另⼀个状态的事物,这个顺序很重要。 从这个意义上说,你可以从列表中读取东西,⽽不需要跟踪你下⼀步需要的东西,或者遍历列表来find你想要的东西。 它在这个意义上确实有助于performance。 这确实很重要,否则这些collections就没有多⼤意义。