![](https://markdown-1258186581.cos.ap-shanghai.myqcloud.com/20190606104746.png)

## 区别

* ArrayList 动态数组

* LinkedList 双向链表,它同样可以被当作栈、队列或双端队列来使用

* 对ArrayList和LinkedList而言,在列表末尾增加一个元素所花的开销都是固定的。对ArrayList而言,主要是在内部数组中增加一项,指向所添加的元素,偶尔可能会导致对数组重新进行分配;而对LinkedList而言,这个开销是统一的,分配一个内部Entry对象。

* 在ArrayList的中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而在LinkedList的中间插入或删除一个元素的开销是固定的。

* LinkedList不支持高效的随机元素访问。

* ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间

## 总结:

LinkedList 在查找指定位置元素的时候,会先根据传入的 index 和当前 size 的一半作比较。如果小于当前的一半,就从头节点遍历,如果大于当前size 的一半,从尾节点开始遍历。

实现如下:

~~~

Node node(int index) {

// assert isElementIndex(index);

// 如果小于当前 size 的一半,从头节点开始遍历

if (index < (size >> 1)) {

Node x = first;

for (int i = 0; i < index; i++)

x = x.next;

return x;

} else {

// 这里是大于当前 size 的一半,从尾节点开始遍历

Node x = last;

for (int i = size - 1; i > index; i--)

x = x.prev;

return x;

}

}

~~~

可以这样说:当操作是在一列数据的**后面添加数据而不是在前面或中间**,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能;当你的操作是在一列数据的**前面或中间添加或删除数据,**并且按照顺序访问其中的元素时,就应该使用LinkedList了。

android list 比较,LinkedList 和 ArrayList 的区别相关推荐

  1. LinkedList和ArrayList的区别

    LinkedeList和ArrayList都实现了List接口,但是它们的工作原理却不一样.它们之间最主要的区别在于ArrayList是可改变大小的数组,而LinkedList是双向链接串列(doub ...

  2. Java ArrayList和Vector、LinkedList与ArrayList、数组(Array)和列表集合(ArrayList)的区别...

    ArrayList和Vector的区别 ArrayList与Vector主要从二方面来说. 一.同步性: Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的. ...

  3. java vector实现的接口_java中List接口的实现类 ArrayList,LinkedList,Vector 的区别 list实现类源码分析...

    java面试中经常被问到list常用的类以及内部实现机制,平时开发也经常用到list集合类,因此做一个源码级别的分析和比较之间的差异. 首先看一下List接口的的继承关系: list接口继承Colle ...

  4. Java List与ArrayList 的区别(List list =new Arraylist(); ArrayList<String> arrayList = new ArrayList())

    一般想知道List 与ArrayList 的区别可能大部分都是看到了 List list = new ArrayList(); 和 ArrayList arrayList = new ArrayLis ...

  5. Java并发编程之:Vector和ArrayList的区别

    2019独角兽企业重金招聘Python工程师标准>>> Java中Vector和ArrayList的区别 首先看这两类都实现List接口,而List接口一共有三个实现类,分别是Arr ...

  6. fileoutputstream路径 android,Android编程中FileOutputStream与openFileOutput()的区别分析

    本文实例分析了Android编程中FileOutputStream与openFileOutput()的区别.分享给大家供大家参考,具体如下: openFileOutput() 首先给大家介绍使用文件如 ...

  7. android MotionEvent中getX()和getRawX()的区别

    今天,讲讲触摸时间里  getX()和getRawX()的区别. 如上图所示: getRowX:触摸点相对于屏幕的坐标 getX: 触摸点相对于按钮的坐标 getTop: 按钮左上角相对于父vie ...

  8. [剑指offer][JAVA][第62题][约瑟夫环][LinkedList vs ArrayList]

    [问题描述] 面试题62. 圆圈中最后剩下的数字 0,1,,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字.求出这个圆圈里剩下的最后一个数字.例如,0.1.2.3.4这5个 ...

  9. 简述Android操作系统和IOS系统的区别;

    软件测试面试题中: 简述Android操作系统和IOS系统的区别: 1.两者运行机制不同:IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制. 2.两者后台制度不同:IOS中任何第三方程序都不能在 ...

最新文章

  1. 微软VSTS的新功能:WebTest要点
  2. 实验八 《Coderxiaoban团队》团队作业4:基于原型的团队项目需求调研与分析
  3. VC实现微秒(十万分之一秒)休眠
  4. merge r语言daframe_R语言总结
  5. node+express项目链接MySQL数据库(最简单版)
  6. python——C/C++python合♂体开发
  7. 洛谷 1297 [国家集训队]单选错位——期望
  8. BZOJ1026[SCOI2009]windy数
  9. linux 新老软件切换,Linux下非常重要的软件切换命令
  10. 黑马程序员Git教程笔记
  11. mysql io线程 原理_MySQL IO线程及相关参数调优
  12. mac下展示隐藏文件
  13. android的反调试方法,Android平台融合多特征的APP反调试方法与流程
  14. 如何更新服务器系统教程,服务器操作系统如何更新
  15. 大数据概论 (理论基础)
  16. 视频下载工具—you-get
  17. 智慧社区运维可视化管理平台主要有哪些功能?
  18. python南开大学王恺mooc_Python爬虫示例(正则表达式、靓汤、selenium),程序,BeautifulSoupselenium...
  19. STM32单片机-低功耗设置
  20. JAVA多线程技术-IO密集型与CPU密集型

热门文章

  1. 开放下载!《一站式大数据开发治理DataWorks使用宝典》
  2. EMR集群安全认证和授权管理
  3. Flink+Hologres亿级用户实时UV精确去重最佳实践
  4. 2020 年 AI 视觉检测的应用价值
  5. 有哪些大数据处理工具?
  6. C#-集合练习 107
  7. 《伊甸之路》:离“现象级”一步之遥
  8. 多数人的懵逼少数人的极乐——极乐迪斯科设计反推
  9. 虚幻引擎学习之路:粒子系统篇(二)
  10. sqlserver导出带数据的脚本文件