List 实现

List 实现分为通用 List 实现和特殊用途的 List 实现。

通用 List 实现

有两个通用的 List 实现 ------ ArrayList 和 LinkedList。大多数时候,你可能会使用 ArrayList,它提供了按位置访问的功能并且速度比较快。当你需要同时移动多个元素的时候,可以充分发挥 System.arraycopy 的优势。可以将 ArrayList 看成是没有同步功能的 Vector。

如果你需要经常在 List 的头部添加元素或者遍历 List 并从内部删除元素,那么你可以考虑使用 LinkedList。这些操作在 LinkedList 中需要的是常数时间,而在 ArrayList 中却需要线性时间。不过你会付出性能上的代价,因为在 LinkedList 中按位置访问需要线性时间,而在 ArrayList 中只需要常数时间。如果你想使用 LinkedList,请在你做出决定前在你的系统中测试一下 LinkedList 和 ArrayList 的性能,通常情况下 ArrayList 更快。

ArrayList 有一个调整参数 ------ 容器初始值,它表示 ArrayList 在它的数据增长之前可以存放的元素个数。LinkedList 并没有调整参数,并且有 7 个可选的操作,其中一个是 clone。另外 6 个分别是, addFirst, getFirst, removeFirst, addLast, getLast, 和 removeLast。LinkedList 还实现了 Queue 接口。

特殊用途的 List 实现

CopyOnWriteArrayList 是实现了复制到数组进行备份的 List。这个实现非常像 CopyOnWriteArraySet。并不需要进行同步,即使在迭代期间,迭代器也会保证不会抛出 ConcurrentModificationException。这个实现很适合用于维护事件处理器列表,这个列表中的数据很少会改变,但是会频繁地进 行迭代和潜在的时间消耗。

如果你需要同步,那么 Vector 将会比使用 Collections.synchronizedList 创建的 ArrayList 略快。但是 Vector 会有一些遗留的操作,所以在使用 Vector 的时候请尽量使用 List 接口中的方法,或者你确定在以后不会更改 Vector 实现。

如果 List 的大小是固定的 ------ 也就是说,你不会调用 remove,add,或任何除了 containsAll 之外的批量操作 ------ 那么你还有第三个选择值得考虑一下。那就是 Arrays.asList,具体内容以后再讨论。

相关推荐
代码改善世界5 分钟前
【C++进阶】二叉搜索树
java·数据结构·c++
如竟没有火炬20 分钟前
至少有K个重复字符的最长子串
开发语言·数据结构·python·算法·leetcode·动态规划
不知名的忻2 小时前
堆排序(Java)
java·数据结构·算法·排序算法
shylyly_3 小时前
大小端字节序
数据结构·算法·联合体·大小端字节序·字节序判断
故事和你913 小时前
洛谷-【图论2-1】树6
开发语言·数据结构·c++·算法·深度优先·动态规划·图论
YL200404263 小时前
044二叉搜索树中第K小的元素
数据结构·leetcode
图码3 小时前
生命游戏的优雅解法:从O(mn)空间到O(1)空间的进阶之旅
数据结构·算法·游戏·矩阵·空间计算
薇茗3 小时前
【初阶数据结构】 升沉有序的平仄 排序
c语言·数据结构·算法·排序算法
蝈理塘(/_\)大怨种4 小时前
快速排序的递归与非递归实现
数据结构·算法
qq_296553274 小时前
矩阵逆时针旋转90度:三种解法从入门到精通
数据结构·python·算法·面试·矩阵