Java集合之ArrayList和LinkedList
1 ArrayList和LinkedList
ArrayList和LinkedList是平常经常用到的两种集合
1.1 对于两者的底层
ArrayList的底层是使用的数组,而LinkedList的底层使用双向链表
1 // ArrayList 2 transient Object[] elementData; 3 4 // LinkedList 5 transient Node<E> first; 6 transient Node<E> last; 7 private static class Node<E> { 8 E item; 9 Node<E> next; 10 Node<E> prev; 11 12 Node(Node<E> prev, E element, Node<E> next) { 13 this.item = element; 14 this.next = next; 15 this.prev = prev; 16 } 17 }
并且ArrayList实现了RandomAccess,所以其查找数据快,并且从尾部插入数据速度也不错。
而对于LinkedList,向其头部或尾部插入数据快,查找数据(get(index))时,会判断是从尾部还是头部开始查找,但是性能不如ArrayList。
1.2 初始化数组
ArrayList分两种情况,分别是构造函数和添加元素中
构造函数中
ArrayList的构造函数可以无参、指定容量和传入集合。如果你指定了容量>0或者传入了非空集合,这时ArrayList会在执行构造函数时就将其底层数组初始化为你指定的容量或者集合的长度。否则,ArrayList会在你添加元素时再去初始化数组,也就我们所说的懒汉式。
添加元素有两种方法add和addAll(假设数组没有初始化)
add添加一个元素,会直接通过grow创建一个长度为10的数组用以初始化.而addAll传入集合时,如果集合长度小于10,则数组长度为10;否则,数组初始化长度为集合长度。
对于LinkedList而言,不用过多说明。
ArrayList和LinkedList中用的多一点的是ArrayList,LinkedList由于实现了Deque接口,可以当作栈来使用。
1.3 有关两者的toString方法
实现如下代码
1 List<Integer> arrayList = Arrays.asList(1, 2, 3, 4); 2 System.out.println("arrayList = " + arrayList); 3 4 LinkedList<Integer> linkedList = new LinkedList<>(arrayList); 5 System.out.println("linkedList = " + linkedList);
输出如下

但是两者都有一个问题,线程不安全。这就需要说到CopyOnWriteArrayList 后面再具体讨论。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)