Skip to content

Commit fc67794

Browse files
committed
add
1 parent c546296 commit fc67794

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

Diff for: ch15/03_Comparing_List_Implementations.md

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
2+
3+
4+
## 比较列表实现
5+
6+
`15-1` 给出了 `List` 类的一些样例操作的比较性能。即使这里的选择比队列甚至集合要窄得多,也可以使用相同的消除过程。与队列一样,首先要问的问题是您的应用程序是否需要线程安全。如果是这样,你应该使用 `CopyOnWriteArrayList`,如果可以的话 - 也就是说,如果写入列表会相对不频繁。如果没有,你将不得不围绕 `ArrayList``LinkedList` 使用一个同步包装器(见 `17.3.1` 节)。
7+
8+
对于大多数列表应用程序,选择在 `ArrayList``LinkedList` 之间,是否同步。再一次,你的决定将取决于在实践中如何使用列表。如果设置并获得主导地位,或者元素插入和移除主要在列表的末尾,那么 `ArrayList` 将是最佳选择。相反,如果您的应用程序需要频繁插入和移除列表开始附近的元素作为使用迭代的进程的一部分,那么 `LinkedList` 可能会更好。如果您有疑问,请在每次实施时测试性能。在最后一种情况下值得考虑的单线程代码的 `Java 6` 替代方案(如果插入和删除实际上位于列表的起始处)是使用非常高效的 `ArrayDeque` 实现写入 `Deque` 接口。对于相对不频繁的随机访问,请使用迭代器,或使用 `toArray``ArrayDeque` 元素复制到数组中。
9+
10+
`15-1`。不同列表实现的比较性能
11+
12+
---|get| add| contains |next |remove(0) |iterator.remove
13+
---|---|---|---|---|---|---
14+
ArrayList |O(1) | O(1) | O(n) |O(1) | O(n) | O(n)
15+
LinkedList |O(n) | O(1) | O(n) |O(1) | O(1) | O(1)
16+
CopyOnWrite-ArrayList |O(1) | O(n) | O(n) |O(1) | O(n) | O(n)
17+
18+
有可能在未来的版本中,`ArrayDeque` 将被改进以实现 `List` 接口;如果发生这种情况,它将成为单线程环境中队列和列表的选择。

0 commit comments

Comments
 (0)