Java™ 教程(List实现)

List实现

List实现分为通用实现和专用实现。html

通用List实现

有两种通用的List实现 — ArrayListLinkedList,在大多数状况下,你可能会使用ArrayList,它提供了恒定时间的位置访问,并且速度很快。它没必要为List中的每一个元素分配节点对象,而且当必须同时移动多个元素时,能够利用System.arraycopy的优点,将ArrayList视为Vector,而没有同步开销。java

若是你常常将元素添加到List的开头或遍历List以从其内部删除元素,则应考虑使用LinkedList,这些操做在LinkedList中须要恒定时间和在ArrayList中须要线性时间。可是在性能付出了巨大的代价,位置访问在LinkedList中须要线性时间和在ArrayList中须要恒定时间。此外,LinkedList的常数因子要差得多,若是你认为要使用LinkedList,请在选择以前同时使用LinkedListArrayList评估应用程序的性能,ArrayList一般更快。segmentfault

ArrayList有一个调整参数 — 初始容量,它是ArrayList增加以前能够容纳的元素数量,LinkedList没有调整参数和七个可选操做,其中之一是clone,其余六个是addFirstgetFirstremoveFirstaddLastgetLastremoveLastLinkedList还实现了Queue接口。api

专用List实现

CopyOnWriteArrayList是一个由写时复制数组备份的List实现,此实现本质上相似于CopyOnWriteArraySet。即便在迭代过程当中也不须要同步,而且保证迭代器永远不会抛出ConcurrentModificationException。此实现很是适合维护事件处理程序列表,在这些事件处理程序列表中更改不多,而且遍历频繁且可能很耗时。数组

若是须要同步,则Vector会比用Collections.synchronizedList同步的ArrayList快一些。可是Vector有不少遗留操做,所以请务必始终使用List接口操做Vector,不然之后将没法替换实现。oracle

若是你的List大小固定 — 也就是说,你将永远不会使用removeadd或除containsAll之外的任何批量操做 — 你确定有第三种选择值得考虑,有关更多信息,请参见便利实现部分中的Arrays.asList性能


上一篇:Set实现

相关文章
相关标签/搜索