ArrayList和LinkedList异同
1、是否保证线程安全:ArrayList和LinkedList都不是同步的,当多个线程访问到同一个ArrayList集合时,如果有超过一个线程修改了ArrayList集合,则必须手动保证该集合的同步性;所以都不保证线程安全;
2、底层数据结构:ArrayList底层使用的是Object数组结构,LinkedList底层使用的是双向链表数据结构;
3、插入或删除元素是否受元素位置的影响:ArrayList是数组存储,所以在第i个位置插入或删除元素时,第i个位置之后的所有元素都会向后/前移动位置(牵一发而动全身);LinkedList使用的是双向链表存储,在第i个位置插入或删除元素时,只需要将i处位置的链表断开,插入/删除元素之后再将链表连接起来,即只需要改变链表指针的指向,不需要重组数组;
4、是否支持快速随机访问:ArrayList底层使用的是Object数组结构,数组有索引,所以可以通过元素索引快速方便的查找到数据;LinkedList底层使用的是双向链表数据结构,需要遍历到特定位置才能访问到特定元素,所以不支持高效的随机访问;
5、内存空间占用;ArrayList的数组结构主要是在数组结尾处会预留一定的空间;而LinkedList的双向链表数据结构,每一个元素都比ArrayList中元素占用的空间大,因为LinkedList中每个元素有数据部分和两个指针分别指向数据前驱和数据后继;
6、实现RandonAccess接口(接口中没有任何定义,但是实现该接口的类具有随机访问功能)的List,优先使用For循环,其次是Fpreach;没有实现RandonAccess接口的List,使用iterator循环遍历,大容量数据不要使用for循环;
来源:CSDN
作者:爱敲代码的程序媛
链接:https://blog.csdn.net/qq_42334879/article/details/104172432