简单来说:
ArrayList底层是一个数组,所以查询快;
LinkedList底层是一个链表,所以增删快。
区别
- 线程安全:两者都不是线程安全的。
- 数据结构:ArrayList 底层是Object数组,LinkedList底层是双向链表。
- 查询:由于ArrayList是底层是数组,所以可以快速随机访问,通过坐标就可以快速定位,而LinkedList 则不可以。
- 增删:对于ArrayList 的数组结构来说,如果添加或删除的是第i个数据,那么数组中i之后的所有数据都会向后或向前移动,而链表结构则不会,所以LinkedList增删较快。
- 容量空间:ArrayList会在尾部预留一定的容量空间,因为如果做添加操作的时候,超出当前数组最大值时,会添加50%的空间。
LinkedList的每一个元素都需要消耗比ArrayList更多的空间,因为需要存放直接后继和直接前驱以及数据。