文章目录
前言
ArrayList和LinkedList是Java中常见的两种集合类,用于存储和操作数据。它们之间有一些区别,在性能和使用场景上有所不同。
一、ArrayList
1. 什么是 ArrayList
可以简单的认为是一个动态数组;实际上 ArrayList 就是用数组实现的,长度不够时,调用 Arrays.copyOf方法,拷贝当前数组到一个新的长度更大的数组;
ArrayList 内部封装一个数组,用数组来存储数据。内部数组的默认初始容量 10,存满后,1.5 倍增长。从 JDK1.8 开始, ArrayList 一开始创建一个长度为 0 的数组,当添加第一个元素时再创建一个始容量为 10 的 数组。
2.ArrayList 的优缺点
2.1 优点
- 能够自动扩容,默认每次扩容为原来容量大小的 1.5 倍。
- 根据下标遍历元素,效率高。
- 根据下标访问元素,效率高
2.2 缺点
- 线程不安全。
- 在中间插入或删除元素的时候需要移动元素,效率低。
二、LinkedList
1.什么是 LinkedList
LinkedList 和 ArrayList 一样,都实现了 List 接口,但其内部的数据结构有本质的不同。LinkedList 是基于链表实现的(通过名字也能区分开来),所以它的插入和删除操作比 ArrayList 更加高效。但也是由于其为基于链表的,所以随机访问的效率要比 ArrayList 差.
2.LinkedList的优缺点
2.1 优点
- LinkedList是基于双向循环链表实现的,除了可以当作链表操作外,它还可以当作栈、队列和双端队列来使用。
- LinkedList实现了Serializable接口,因此它支持序列化,能够通过序列化传输。
- LinkedList基于链表实现的,因此不存在容量不足的问题,所以没有扩容的方法
2.2 缺点
- LinkedList同样是非线程安全的,只在单线程下适合使用。
- LinkedList使用链表保存集合中的元素,因此插入删除时性能高,但是随机访问的性能较差
总结
以上就是ArrayList和LinkedList的区别,建议大家在学习的过程中可以对照源码,深入理解ArrayList和LinkedList的运行机制。