1.保证线程安全:
-
ArrayList和LinkedList都是不同步的,也就是都不保证线程安全。
2.底层数据结构:
-
ArrayList底层OBJECT数组,LinkedList底层数据结构是双向链表
3.插入和删除是否受到元素位置影响:
-
ArrayList是数组所以插入一般都是add在队尾,如果要在指定位置i插入和删除元素的话,时间复杂度为O(n-i),因为在进行上述操作时,集合第i个和第i个元素之后的(n-i)个元素都需要执行向后或者向前移一位。
-
LinkedList是双向链表,对于它的插入和删除元素是不受元素位置的影响,因为它是由其中的next指针指向下一个元素的地址,所以要进行插入删除操作只需改变对应的next指针指向即可。
4.是否支持快速随机访问:
-
LinkedList不支持高效的随机元素访问,因为它的底层是基于链表的数据结构,寻找某一个的元素,只能找到其对应的上一个元素的地址,所以不支持随机访问。
-
ArrayList支持。对应于get(int index)方法。
5.内存空间占用:
-
LinkedList内存花费体现在它的每一个元素都需要比 ArrayList更多的空间,因为存放直接后继和直接前驱以及数据。
-
ArrayList空间浪费体现在list列表的结尾会预留一定的容量。