1.是否保证线程安全
答:ArrayList和LinkdedList都是不同步的,也就是不保证线程安全;
2.底层数据结构
答:ArrayList底层使用的是Object数组,LinkedList底层使用的是双向链表;
3.插入和删除是否受元素位置的影响
答:因为ArrayList底层使用的是Object数组,既采用了数组储存,所以插入和删除元素的时间复杂度受元素位置的影响,比如在执行add(E e)方法的时候,ArraytList会默认将指定的元素追加到此列表的末尾,这种时间复杂度就是O(1),但是如果要在指定的位置插入或者删除的话(add(index’,E element))时间复杂度就是O(n-1)。而LinkedList采用的是双向链表,既采用的是链表储存,所以对于元素的插入和删除是不受元素位置的影响的,时间复杂度近似O(1),此时在指定位置插入或者删除,只需要将待插入的数据放在指定位置就能进行插入,时间复杂度就为O(n);
4.是否支持快速随机访问
答:LinkedList采用链表储存,不支持快速随机访问,因为需要遍历这个链表,但是ArrayList采用的是数组储存,只需知道下标就好了,既快速随机访问就是通过元素的序号快速获取元素对象(对应于get(int index)方法);
5.内存空间占用
答:还是最基础的,ArrayList采用的是数组存储,空间的浪费基本上体现在list列表的结尾会预留一定的容量空间。而LinkedList采用的是链表储存,所以空间浪费在它的每一个元素结点都需要储存其直接后继和直接前去以及数据故需要消耗比ArrayList更多的空间。
ArrayList和LinkedList的区别
最新推荐文章于 2023-05-26 19:54:51 发布
本文详细对比了ArrayList和LinkedList两种Java集合类。ArrayList基于Object数组,适合随机访问但插入删除操作相对较慢;LinkedList则采用双向链表,插入删除高效但不支持快速随机访问。两者在内存占用上,ArrayList预留容量空间,LinkedList每个节点额外存储指针,导致空间占用更大。
摘要由CSDN通过智能技术生成