Java 集合框架实现:大 O 总结
在教授“Java 速成课程”时,了解以下内容至关重要与各种集合实现相关的 Big-O 时间复杂度。虽然观众可能熟悉 Big-O 表示法,但他们不太可能知道特定集合上不同操作的具体复杂性。
幸运的是,《Java 泛型和集合》一书提供了有关这些复杂性的宝贵见解。本文总结了书中的信息,为每种类型的集合提供了详细的表格:列表、集合、映射和队列。
列表实现:
Operation | ArrayList | LinkedList | CopyOnWriteArrayList |
---|---|---|---|
get | O(1) | O(n) | O(1) |
add | O(1) | O(1) | O(n) |
contains | O(n) | O(n) | O(n) |
next | O(1) | O(1) | O(1) |
remove(0) | O(n) | O(1) | O(n) |
iterator.remove | O(n) | O(1) | O(n) |
集合实现:
Operation | HashSet | LinkedHashSet | CopyOnWriteArraySet | EnumSet | TreeSet | ConcurrentSkipListSet |
---|---|---|---|---|---|---|
add | O(1) | O(1) | O(n) | O(1) | O(log n) | O(log n) |
contains | O(1) | O(1) | O(n) | O(1) | O(log n) | O(log n) |
next | O(h/n) | O(1) | O(1) | O(1) | O(log n) | O(1) |
Notes | h is the table capacity |
地图实现:
Operation | HashMap | LinkedHashMap | IdentityHashMap | EnumMap | TreeMap | ConcurrentHashMap | ConcurrentSkipListMap |
---|---|---|---|---|---|---|---|
get | O(1) | O(1) | O(1) | O(1) | O(log n) | O(1) | O(log n) |
containsKey | O(1) | O(1) | O(1) | O(1) | O(log n) | O(1) | O(log n) |
next | O(h/n) | O(1) | O(h/n) | O(1) | O(log n) | O(h/n) | O(1) |
Notes | h is the table capacity |
队列实现:
Operation | PriorityQueue | ConcurrentLinkedQueue | ArrayBlockingQueue | LinkedBlockingQueue | PriorityBlockingQueue | DelayQueue | LinkedList | ArrayDeque | LinkedBlockingDeque |
---|---|---|---|---|---|---|---|---|---|
offer | O(log n) | O(1) | O(1) | O(1) | O(log n) | O(log n) | O(1) | O(1) | O(1) |
peek | O(1) | O(1) | O(1) | O(1) | O(1) | O(1) | O(1) | O(1) | O(1) |
poll | O(log n) | O(1) | O(1) | O(1) | O(log n) | O(log n) | O(1) | O(1) | O(1) |
size | O(1) | O(n) | O(1) | O(1) | O(1) | O(1) | O(1) | O(1) | O(1) |
以上是文章的标题应该是:What are the Big-O Time Complexities of Java Collection Implements?的详细内容。更多信息请关注PHP中文网其他相关文章!