1.ArrayList 是基于数组存放的集合,LinkedList 是基于链表存放的集合。
2. 他们都是 List 集合的实现类,且都是非线程安全的。
ArrayList 的初始容量是 10,每次扩容的话是之前长度的 1.5 倍,且通过内存拷贝来实现数组的复制,提供性能。因为 ArrayList 是基于数组实现的,所以可以通过索引来进行快速的定位查询,对于随机 index 访问的 get 和 set 方法,一般 ArrayList 的速度要优于 LinkedList。但在删除操作上效率很慢,要涉及到元素移动。
而 LinkedList 是基于双链表实现的,所以在添加、删除操作上效率比较高,不涉及元素的移动,只需要修改指针;但在查询方面效率很差,因为要一个元素一个元素遍历,直到找到目标元素。
4. 内存占用:由于 ArrayList 在初始化时就会分配一定的连续空间,因此它的内存占用较为稳定,但当元素数量超出容量时需要重新分配空间,开销较大。而 LinkedList 则是动态申请内存,每个元素包含两个指针,因此内存占用相对较大。