我可能很快就会教授“Java 速成课程”。虽然假设观众成员会知道 Big-O 表示法可能是安全的,但假设他们会知道各种集合实现上的各种操作的顺序可能是不安全的。
我可以花时间自己生成一个汇总矩阵,但如果它已经存在于公共领域的某个地方,我肯定想重用它(当然,有适当的信用。)
有人有任何指示吗?
我可能很快就会教授“Java 速成课程”。虽然假设观众成员会知道 Big-O 表示法可能是安全的,但假设他们会知道各种集合实现上的各种操作的顺序可能是不安全的。
我可以花时间自己生成一个汇总矩阵,但如果它已经存在于公共领域的某个地方,我肯定想重用它(当然,有适当的信用。)
有人有任何指示吗?
Java 泛型和集合一书有此信息(第 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 底部包含一些很好的链接:
这个网站非常好,但不是特定于 Java:http ://bigocheatsheet.com/
上面的人对 HashMap / HashSet 与 TreeMap / TreeSet 进行了比较。
我将讨论 ArrayList 与 LinkedList:
数组列表:
get()
add()
ListIterator.add()
or在中间插入或删除一个元素Iterator.remove()
,将 O(n) 移动以下所有元素链表:
get()
add()
ListIterator.add()
or插入或删除一个元素Iterator.remove()
,它将是 O(1)