Java Collections Framework 实现的 Big-O 摘要?[已关闭]
2022-08-31 06:34:05
我可能很快就会教一个“Java速成课程”。虽然可以安全地假设受众成员会知道 Big-O 表示法,但假设他们会知道各种集合实现上各种操作的顺序可能并不安全。
我可以花时间自己生成一个摘要矩阵,但如果它已经在公共领域的某个地方,我肯定会想重用它(当然,要有适当的信用)。
有人有任何指点吗?
我可能很快就会教一个“Java速成课程”。虽然可以安全地假设受众成员会知道 Big-O 表示法,但假设他们会知道各种集合实现上各种操作的顺序可能并不安全。
我可以花时间自己生成一个摘要矩阵,但如果它已经在公共领域的某个地方,我肯定会想重用它(当然,要有适当的信用)。
有人有任何指点吗?
Java Generics and Collections一书有这样的信息(页面:188,211,222,240)。
列表实现:
get add contains next remove(0) iterator.remove
ArrayList O(1) O(1) O(n) O(1) O(n) O(n)
LinkedList O(n) O(1) O(n) O(1) O(1) O(1)
CopyOnWrite-ArrayList O(1) O(n) O(n) O(1) O(n) O(n)
设置实现:
add contains next notes
HashSet O(1) O(1) O(h/n) h is the table capacity
LinkedHashSet O(1) O(1) O(1)
CopyOnWriteArraySet O(n) O(n) O(1)
EnumSet O(1) O(1) O(1)
TreeSet O(log n) O(log n) O(log n)
ConcurrentSkipListSet O(log n) O(log n) O(1)
映射实现:
get containsKey next Notes
HashMap O(1) O(1) O(h/n) h is the table capacity
LinkedHashMap O(1) O(1) O(1)
IdentityHashMap O(1) O(1) O(h/n) h is the table capacity
EnumMap O(1) O(1) O(1)
TreeMap O(log n) O(log n) O(log n)
ConcurrentHashMap O(1) O(1) O(h/n) h is the table capacity
ConcurrentSkipListMap O(log n) O(log n) O(1)
队列实现:
offer peek poll size
PriorityQueue O(log n) O(1) O(log n) O(1)
ConcurrentLinkedQueue O(1) O(1) O(1) O(n)
ArrayBlockingQueue O(1) O(1) O(1) O(1)
LinkedBlockingQueue O(1) O(1) O(1) O(1)
PriorityBlockingQueue O(log n) O(1) O(log n) O(1)
DelayQueue O(log n) O(1) O(log n) O(1)
LinkedList O(1) O(1) O(1) O(1)
ArrayDeque O(1) O(1) O(1) O(1)
LinkedBlockingDeque O(1) O(1) O(1) O(1)
java.util 包的 javadoc 底部包含一些很好的链接: