ArrayList和LinkedList的区别

存储结构

ArrayList基于动态数组,在内存中是顺序存储,适合下标访问。

LinkedList基于链表,链式结构存储分散在内存中,适合做数据插入或删除操作。

读写性能

ArrayList是基于数组,所以访问元素是通过下标访问,读取效率高。插入元素分为三种情况;

  • 超容量插入:需要创建一个新数组把原来的数组拷贝过去再插入新的元素。效率低。
  • 中间插入:将插入位置下标以后的每个元素后移一位,腾出地方,再将新元素插入到对应数组位置上。效率低。
  • 尾插:直接将新元素插入到数组尾部空闲位置。

ArrayList使用尾插法配合指定初始容量可以尽可能发挥性能,甚至超越LinkedList(因为LinkedtList有个内部类Node,在每次插入元素时需要创建Node对象)。


LinkedList是基于链表,所以不适合做查询,访问元素需要逐一遍历。遍历LinkedList必须使用迭代器iterator最好不要使用for循环,因为每次for循环get(i)时都有对lsit重新进行遍历,效率极低。但对于插入和删除元素有优势,链表在插入时只需要把前结点的next指针指向新结点,把新结点的next指针指向后结点即可。删除结点时只需把被删除结点的前结点next指向后结点。


总结

读多写少的场景适合用ArrayList;

频繁插入删除元素LinkedList更适合一些。

posted @ 2021-06-09 23:18  浩瀚的雨  阅读(211)  评论(0)    收藏  举报