您当前的位置: 首页 >  ar
  • 0浏览

    0关注

    674博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

面试:ArrayList和LinkedList对比

沙漠一只雕得儿得儿 发布时间:2022-01-08 21:47:01 ,浏览量:0

ArrayList和LinkedList的区别、优缺点以及应用场景

1、ArrayList是基于数组实现的,其构造函数为:

private transient Object[] elementData;
private int size;

ArryList初始化时,elementData数组大小默认为10; 每次add()时,先调用ensureCapacity()保证数组不会溢出,如果此时已满,会扩展为数组length的1.5倍+1,然后用array.copy的方法,将原数组拷贝到新的数组中;

ArrayList线程不安全,Vector方法是同步的,线程安全;

2、LinkedList是基于双链表实现的:

Object element;
Entry next, previous;

初始化时,有个header Entry,值为null; 使用header的优点是:在任何一个条目(包括第一个和最后一个)都有一个前置条目和一个后置条目,因此在LinkedList对象的开始或者末尾进行插入操作没有特殊的地方;

使用场景:

(1)如果应用程序对各个索引位置的元素进行大量的存取或删除操作,ArrayList对象要远优于LinkedList对象;

  ( 2 ) 如果应用程序主要是对列表进行循环,并且循环时候进行插入或者删除操作,LinkedList对象要远优于ArrayList对象;  

区别:

  • ArrayList是实现了基于动态数组的数据结构,LinkedList是基于链表结构。
  • 对于随机访问的getset方法查询元素,ArrayList要优于LinkedList,因为LinkedList循环链表寻找元素。
  • 对于新增和删除操作addremoveLinkedList比较高效,因为ArrayList要移动数据。

优缺点:

1. Arraylist:

优点:ArrayList是实现了基于动态数组的数据结构,因为地址连续,一旦数据存储好了,查询操作效率会比较高(在内存里是连着放的)。 缺点:因为地址连续, ArrayList要移动数据,所以插入和删除操作效率比较低。 2. LinkedList:

优点:LinkedList基于链表的数据结构,地址是任意的,所以在开辟内存空间的时候不需要等一个连续的地址,对于新增和删除操作add和remove,LinedList比较占优势。LinkedList 适用于要头尾操作或插入指定位置的场景 缺点:因为LinkedList要移动指针,所以查询操作性能比较低。  

应用场景:

ArrayList使用在查询比较多,但是插入和删除比较少的情况,而LinkedList用在查询比较少而插入删除比较多的情况。

关注
打赏
1657159701
查看更多评论
立即登录/注册

微信扫码登录

0.0369s