博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 集合框架 List实现
阅读量:2392 次
发布时间:2019-05-10

本文共 981 字,大约阅读时间需要 3 分钟。

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

通用的列表实现

有两个通用的列表实现——ArrayList和LinkedList。大多数情况下,您可能会使用ArrayList,它提供了常量时间的位置访问,而且非常快。它不需要为列表中的每个元素分配一个节点对象,它可以利用系统。arraycopy必须同时移动多个元素。将ArrayList看作是没有同步开销的矢量。

如果您经常在列表的开头添加元素,或者在列表中迭代,从其内部删除元素,那么您应该考虑使用LinkedList。这些操作需要在一个链表和一个ArrayList中的线性时间中常量时间。但是你在性能上付出了巨大的代价。位置访问在一个链表中需要线性时间,而在ArrayList中则需要常量时间。此外,LinkedList的常数因子更糟糕。如果你认为你想使用LinkedList,在做出选择之前,用LinkedList和ArrayList来衡量你的应用程序的性能;ArrayList通常更快。

ArrayList有一个调优参数——初始容量,它指的是ArrayList在必须增长之前可以容纳的元素的数量。LinkedList没有调优参数和7个可选操作,其中一个是克隆。另外六个是addFirst, getFirst, removeFirst, addLast, getLast,和removeLast。LinkedList也实现了队列接口。

专用列表实现

CopyOnWriteArrayList是一个由copy-on-write数组支持的列表实现。这个实现在性质上与CopyOnWriteArraySet类似。没有同步是必要的,即使在迭代,迭代器保证永远不会抛出ConcurrentModificationException。这个实现非常适合于维护事件处理程序列表,在这个列表中更改不频繁,并且遍历是频繁且可能耗费时间的。

如果你需要同步,一个向量将略高于一个ArrayList Collections.synchronizedList同步。但是Vector有大量的遗留操作,所以要小心使用列表接口来操作向量,否则您将无法在稍后的时间内替换实现。

如果您的列表是固定大小的——也就是说,您永远不会使用删除、添加或任何其他的批量操作——您有第三个选择,绝对值得考虑。可以查看, asList的实现部分获取更多信息。

参考文档

转载地址:http://feqab.baihongyu.com/

你可能感兴趣的文章
从头做leetcode之leetcode 5 最长回文子串
查看>>
从头做leetcode之leetcode 6 Z字形变换
查看>>
将无符号偏移量添加到...溢出到...
查看>>
从头做leetcode之leetcode 11 盛最多水的容器
查看>>
设计模式、框架和架构的联系
查看>>
安装VMware虚拟机
查看>>
常用的设计模式和代码
查看>>
桥接模式-通俗的理解(转)
查看>>
MXML 文件中的xmlns是什么意思?
查看>>
Flex Builder 中的工作空间、项目
查看>>
Flex 获得远程数据
查看>>
Flex 添加效果的两种方法
查看>>
Flash Builder 4字体设置
查看>>
Actionscript 3.0 笔记一
查看>>
图像处理库OpenCV参考网址
查看>>
dllimport与dllexport作用与区别
查看>>
OpenGL坐标系
查看>>
C++用new和不用new创建类对象区别
查看>>
C++ C# JAVA 创建对象
查看>>
齐次坐标的理解
查看>>