java - TreeSet 与 LinkedHashSet 和 TreeMap 相比 LinkedHashMap 增加了多少成本?

标签 java collections

LinkedHashSet - 此实现使其客户免受 HashSet 提供的未指定的、通常困惑的排序的影响,而不会导致与 TreeSet 相关的成本增加

关于 LinkedHashMap 与 TreeMap 的说法相同

增加的成本(LinkedHashMap 与 TreeMap)究竟是多少?

这是否意味着 TreeSet 每个元素需要更多内存? LinkedHashSet 需要更多的内存用于两个额外的链接,但是 TreeSet 需要额外的内存来存储 Map.Entry 对元素(因为隐式基于 TreeMap),此外 LinkedHashSet 基于 HashMap 也有 Map.Entry 对元素开销......

所以区别在于添加新元素的速度有多快(在 TreeSet 的情况下,由于某些“排序”,它需要更长的时间)。

其他显着增加的成本是什么?

最佳答案

TreeSet/TreeMap具有更高的操作时间复杂度,例如 add() , contains() (对于 TreeSet ),put() , containsKey() (对于 TreeMap )等...因为它们需要对数时间来定位树中的元素(或向树中添加元素),而 LinkedHashSet/LinkedHashMap这些操作需要预期的恒定时间。

就内存要求而言,差异很小:

  • TreeMap条目持有键,值,3 Entry引用文献(左、右、父)和 boolean .

  • LinkedHashMap条目持有键,值,3 Entry引用(下一个,之前,之后)和一个 int .

关于java - TreeSet 与 LinkedHashSet 和 TreeMap 相比 LinkedHashMap 增加了多少成本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53608152/

相关文章:

java - NNTP 客户端 - Java - 下载文章随机下载 3 个额外的垃圾字节

memory - 如何在 J2ME/BlackBerry 中深度复制向量?

Java arrayList 与 Vector 不兼容

c# - 何时返回 IEnumerable<T>

java - 如何使用 Java 反射来检查给定类是否实现了 Iterable<? extends T>,对于任何给定的 T

java - HQL,我可以参数化 FROM 子句吗?

java - @WebMvcTest可以有两个 Controller 吗

java - Dictionary of unknown size - 查找一个词是否在字典中

java - Collections.sort() 和通过添加到 TreeSet 中获取排序集合之间的区别?

java - 为什么我的 TimerTask 会出现此错误?