Space Java 数据结构的复杂性

Space complexity of Java data structures

我一直在搜索许多包含 Java 数据结构的 space 复杂性信息的网站。我正在专门搜索 HashMapArrayListStackLinkedList 的 space 复杂度。我发现一个接近并且仅在 Stack 和 LinkedList 上有信息的站点是:http://bigocheatsheet.com/,但它只有最坏的情况。任何人都知道任何其他来源有关于 HashMap 或 ArrayList 的 space 复杂性的信息,最好是平均情况和最坏情况?

如果您检查这些 类 的代码,您会发现它们在内部表示为数组。因此,操作的复杂度应该与数组的复杂度相似。

都是O(N)在正常情况下space使用。 (我认为所有标准集合数据结构也是如此......)

当然,这并没有告诉您一些重要的事实,即这些数据结构在实践中将使用多少 space。例如:

  • ArrayListHashMaps space 的使用与列表大小不成正比。两者都针对部分或全部 space 利用率制定了 "double the size when full" 策略。

  • 在最好的情况下,ArrayList 每个元素比 LinkedList 使用更少 space,而 LinkedList 使用更少 space 每个元素比 HashMap.

以此类推

也很难量化最坏的情况...因为某些使用模式会导致 empty ArrayListHashMap占用大量space。对于这些数据结构,space 用法 可能 与最大 N 值(到目前为止)而不是当前 N 值成比例。

  • 删除元素后,ArrayList 不会 "give back" space。

  • 对于HashMap,链占用的space可以增长和收缩,但哈希数组只会增长。