底层数据结构:
ArrayList 用的是动态数组的数据结构
LinkedList 用的是双向链表数据结构
操作查询效率:
ArrayList支持索引查询,LinkedList不支持
查找(未知索引):因为ArrayList和LinkedList都需要遍历 他们的查询时间复杂度都是O(n)
-
新增和删除
-
ArrayList尾部插入和删除,时间复杂度是O(1);其他部分增删需要挪动数组,时间复杂度是O(n)
-
LinkedList头尾节点增删时间复杂度是O(1),其他都需要遍历链表,时间复杂度是O(n)
-
内存占用空间
ArrayList底层是数组,内存连续,节省内存
LinkedList 是双向链表需要存储数据,有两个指针,更占用内存
线程安全
-
ArrayList和LinkedList都不是线程安全的