说⼀下ArrayList和LinkedList区别

  1. 具体区别  
1.1. ⾸先,他们的底层数据结构不同,ArrayList底层是基于数组实现的,LinkedList底层是基于链表实现的
1.2. 由于底层数据结构不同,他们所适⽤的场景也不同,ArrayList更适合随机查找,
LinkedList更适合删除和添加,查询、添加、删除的时间复杂度不同
1.3. 另外ArrayList和LinkedList都实现了List接⼝,但是LinkedList还额外实现了Deque接⼝,所以
LinkedList还可以当做队列来使⽤

  2.类结构

 2.1.ArrayList实现了List接口
public class ArrayList<E> extends AbstractList<E> implements List<E>{...}

2.2.LinkedList实现了List和Deque接口,所以LinkedList可以当做双端队列来进行使用:因为Deque接口中有addFirst/addLast/getFirst/getLast等操作
public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>{...}

  3.效率问题

    3.1 查询:arrayList的速率会更快,因为arrayList底层是基于数组,所以获取是通过数组下标进行获取!

        但是linkedList.getFirst()/getLast()速率也是很快的,因为linkedList会有两个属性专门标注第一个元素和最后一个元素
1.arrayList.get(1);
底层代码:基于下标获取
public E get(int index) {
rangeCheck(index);
return elementData(index);
}
2.linkedList.get(1);
底层代码:基于链表的操作,所以获取在底层是进行循环获取的!
public E get(int index) {
...
Node<E> x = last;
for (int i = size - 1; i > index; i--)
x = x.prev;
return x;
...
}

    

  3.2 添加操作
1.arrayList的添加
1.1添加元素:需要考虑底层数组的扩容,效率较慢
arrayList.add(1);
1.2:在指定的位置1,添加元素1:底层涉及到数组的移动,因为1位置后的数据都得往后移动,效率较慢
arrayList.add(1,1);
2.linkedList的添加
2.1添加元素:在末尾添加元素,因为底层是链表,所以添加速度较快
linkedList.add(1);
2.2:在指定的位置1,添加元素1:因为底层是链表,需要先循环找到要添加的位置,
如果下标数字过大,等于循环次数越多,效率就会越慢
下标数字小,循环次数小,效率快!所以此处的效率是决定于插入位置的数字大小
linkedList.add(1,1);
总结:
 1.arrayList:查询速率较快,但是增删效率一般!
 2.linkedList:查询速率较慢,但是增删效率比arrayList快!
 
 

1.ArrayList和LinkedList区别的更多相关文章

  1. String[]和ArrayList和LinkedList区别

    String[]和ArrayList和LinkedList区别 参考文档如下: http://www.blogjava.net/flysky19/articles/92775.html http:// ...

  2. 一、基础篇--1.2Java集合-Arraylist 与 LinkedList 区别

     Arraylist 与 LinkedList 区别  结构上的区别 ArrayList底层实现基于动态数组,LinkedList底层实现基于双向链表.  性能上区别 ArrayList查询快,增删慢 ...

  3. Java中ArrayList和LinkedList区别

    ArrayList和LinkedList的大致区别如下:1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. 2.对于随机访问get和set,ArrayLis ...

  4. 简谈ArrayList和LinkedList区别

    对于ArrayList和LinkedList,他们都实现了List接口,他们的区别大致为: ArrayList LinkedList (1)底层是数组,可以以O(1)的时间复杂度对元素进行随机访问 以 ...

  5. ArrayList和LinkedList区别

    一般大家都知道ArrayList和LinkedList的大致区别:      1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构.      2.对于随机访问 ...

  6. ArrayList和LinkedList区别及性能测试

    ArrayList和LinkedList是Java Lis接口的2个实现.它们的区别如下表所示: 底层结构 强项 弱项 ArrayList 数组 随机访问get和set 插入删除 LinkedList ...

  7. Java中ArrayList和LinkedList区别 时间复杂度 与空间复杂度

    一般大家都知道ArrayList和LinkedList的大致区别:      1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构.      2.对于随机访问 ...

  8. Java中ArrayList和LinkedList区别、ArrayList和Vector的区别

    一般大家都知道ArrayList和LinkedList的大致区别: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. 2.对于随机访问get和set,Ar ...

  9. ArrayList和LinkedList区别(蚂蚁金服面试题)

    1. 是否保证线程安全: ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全: 2. 底层数据结构: Arraylist 底层使用的是Object数组:LinkedLis ...

随机推荐

  1. Spring-boot-菜鸟-properties配置

    如果测试结果出现中文乱码: 结果": Person{lastName='张胜男', age=11, boss=false, birth=Wed Nov 11 00:00:00 CST 202 ...

  2. Vue基于webpack自动装载配置

    Vue的自动装载配置是在 @cli/cli-service 包中,配置文件的目录在 lib/config/  下的文件,css.js 文件是配置样式的处理,先从这里开始了解把 CSS配置流程 对应着这 ...

  3. redis 过期键的删除策略?

    1.定时删除:在设置键的过期时间的同时,创建一个定时器 timer). 让定时器在键 的过期时间来临时,立即执行对键的删除操作. 2.惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查取得的 ...

  4. SqlMapConfig.xml文件详解

    SqlMapConfig.xml 是 mybatis 的全局配置文件,配置内容如下: properties(属性) settings(全局配置参数) typeAliases(类型别名) typeHan ...

  5. 8_LQR 控制器_状态空间系统Matlab/Simulink建模分析

    再线性控制器中讲到: 举例说明(线性控制器中的一个例子)博客中有说明 在matlab中:使用lqr求解K1.K2 这里希望角度(即x1)能迅速变化,所以Q矩阵中Q11为100,并没有关心角速度(dot ...

  6. python中PIL库的使用

    API参考 打开dos窗口,安装库: pip install pillow 很明显,图片有点大,咱们缩略一下: from PIL import Image im = Image.open(" ...

  7. 三、原理图生成网表并导入PCB放置元件

    1.生成网表 2.成功标志 3.新建PCB文件 4.导入网表至PCB 5.导入网表成功标志 6.创建.psm文件(绘制的封装格式为.dra文件,在PCB里面要以.psm的文件存在)  将丝印做成封装需 ...

  8. Issues with position fixed & scroll(移动端 fixed 和 scroll 问题)

    转载请注明英文原文及译文出处 原文地址:Issues with position fixed & scrolling on iOS 原文作者:Remy Sharp译文地址:移动端 fixed ...

  9. Python窗口学习之浅尝按键触发事件

    一.窗口上敲键盘触发事件(以Enter键为例) 二.点击窗口按钮触发事件(以鼠标左键双击为例) 代码: import tkinter as tk root = tk.Tk() root.geometr ...

  10. CentOS的安装以及IP地址(动态/静态)的配置

    啊!复试压力好大,跟好多学长聊完以后觉得自己更该好好努力了,一边好好准备复试科目,一边把之前忘掉的捡起来吧,加油! 1.安装的具体过程请参照这位博主写的,我觉得写的很详细,https://blog.c ...