Space Java 数据结构的复杂性
Space complexity of Java data structures
我一直在搜索许多包含 Java 数据结构的 space 复杂性信息的网站。我正在专门搜索 HashMap
、ArrayList
、Stack
和 LinkedList
的 space 复杂度。我发现一个接近并且仅在 Stack 和 LinkedList 上有信息的站点是:http://bigocheatsheet.com/,但它只有最坏的情况。任何人都知道任何其他来源有关于 HashMap 或 ArrayList 的 space 复杂性的信息,最好是平均情况和最坏情况?
如果您检查这些 类 的代码,您会发现它们在内部表示为数组。因此,操作的复杂度应该与数组的复杂度相似。
都是O(N)
在正常情况下space使用。 (我认为所有标准集合数据结构也是如此......)
当然,这并没有告诉您一些重要的事实,即这些数据结构在实践中将使用多少 space。例如:
ArrayList
或 HashMap
s space 的使用与列表大小不成正比。两者都针对部分或全部 space 利用率制定了 "double the size when full" 策略。
在最好的情况下,ArrayList
每个元素比 LinkedList
使用更少 space,而 LinkedList
使用更少 space 每个元素比 HashMap
.
以此类推
也很难量化最坏的情况...因为某些使用模式会导致 empty ArrayList
或 HashMap
占用大量space。对于这些数据结构,space 用法 可能 与最大 N
值(到目前为止)而不是当前 N
值成比例。
删除元素后,ArrayList
不会 "give back" space。
对于HashMap
,链占用的space可以增长和收缩,但哈希数组只会增长。
我一直在搜索许多包含 Java 数据结构的 space 复杂性信息的网站。我正在专门搜索 HashMap
、ArrayList
、Stack
和 LinkedList
的 space 复杂度。我发现一个接近并且仅在 Stack 和 LinkedList 上有信息的站点是:http://bigocheatsheet.com/,但它只有最坏的情况。任何人都知道任何其他来源有关于 HashMap 或 ArrayList 的 space 复杂性的信息,最好是平均情况和最坏情况?
如果您检查这些 类 的代码,您会发现它们在内部表示为数组。因此,操作的复杂度应该与数组的复杂度相似。
都是O(N)
在正常情况下space使用。 (我认为所有标准集合数据结构也是如此......)
当然,这并没有告诉您一些重要的事实,即这些数据结构在实践中将使用多少 space。例如:
ArrayList
或HashMap
s space 的使用与列表大小不成正比。两者都针对部分或全部 space 利用率制定了 "double the size when full" 策略。在最好的情况下,
ArrayList
每个元素比LinkedList
使用更少 space,而LinkedList
使用更少 space 每个元素比HashMap
.
以此类推
也很难量化最坏的情况...因为某些使用模式会导致 empty ArrayList
或 HashMap
占用大量space。对于这些数据结构,space 用法 可能 与最大 N
值(到目前为止)而不是当前 N
值成比例。
删除元素后,
ArrayList
不会 "give back" space。对于
HashMap
,链占用的space可以增长和收缩,但哈希数组只会增长。