Arraylist:底层是基于动态数组,根据下表随机访问数组元素的效率高,向数组尾部添加元素的效率高;但是,删除数组中的数据以及向数组中间添加数据效率低,因为需要移动数组。

例如最坏的情况是删除第一个数组元素,则需要将第2至第n个数组元素各向前移动一位。而之所以称为动态数组,是因为Arraylist在数组元素超过其容量大,Arraylist可以进行扩容(针对JDK1.8 数组扩容后的容量是扩容前的1.5倍),Arraylist源码中最大的数组容量是Integer.MAX_VALUE-8。

对于空出的8位,目前解释是 :①存储Headerwords;②避免一些机器内存溢出,减少出错几率,所以少分配③最大还是能支持到Integer.MAX_VALUE(当Integer.MAX_VALUE-8依旧无法满足需求时)。

以下是Arraylist部分源码:

Arraylist扩容:

Arraylist添加数据:(向数组尾部添加)

向数组的指定位置添加数组:

可以看到,只要ArrayList的当前容足够大,add()操作向数组的尾部的效率非常高的,当向数组指定位置添加数据时,会进行大量的数组移动复制操作。而数组复制时,最终将调用System.arraycopy()方法,因此add()操作的效率还是相当高的。往期:一百期面试题汇总

尽管这样当向指定位置添加数据时也还是比Linkedlist慢,后者添加数据只需要改变指针指向即可。Arraylist删除数组也需要移动数组,效率较慢。

Linkedlist基于链表的动态数组,数据添加删除效率高,只需要改变指针指向即可,但是访问数据的平均效率低,需要对链表进行遍历。

Arraylist get数据的源码:(根据下标访问,效率高)

Linkedlist访问数据的源码:(node()函数遍历链表)

总结:

1、对于随机访问get和set,ArrayList优于LinkedList,因为LinkedList要移动指针。对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

2、各自效率问题:

来源:http://blog.csdn.net/weixin_42468526/article/details/81178698

arraylist删除指定元素_面试官:谈谈常用的Arraylist和Linkedlist的区别相关推荐

  1. arraylist删除指定元素_揭开ArrayList的外衣看本质

    揭开ArrayList的外衣,看本质​mp.weixin.qq.com 源码还是比较多的,安安静静的读完确实不易,所以我们读源码要有着重点. ArrayList的继承和实现关系 ArrayList的成 ...

  2. arraylist删除指定元素_【追凶】ArrayList使用增强for遍历删除元素异常ConcurrentModification...

    在工作中我们经常需要在遍历集合的时候删除元素,一开始我也以为只要在增强for循环中remove元素就可以了,现实给了我一个巴掌那就是ConcurrentModificationException. 首 ...

  3. 联合索引会创建几个索引_面试官:谈谈你对mysql联合索引的认识?

    引言 这篇文章作为<面试官:谈谈你对mysql索引的认识>的续篇,我当时在写这篇的时候,考虑到篇幅问题所以略去了联合索引的内容,今天给大家补上. 本文预计分为两个部分:(1)联合索引部分的 ...

  4. js list删除指定元素_删除js数组中的指定元素,有这两步就够了

    js数组是js部分非常重要的知识,有时我们有这么个需求js数组删除指定元素,先定义一个函数来获取删除指定元素索引值,然后用js数组删除的方法,来删除指定元素即可,就两步不难,很简单. 1.JS的数组对 ...

  5. js array 删除指定元素_数组--学习笔记(数据结构数组 /js数组)

    学习目标: 了解什么是数组: 数组如何访问内存地址(一维,二维): 什么是数组 是由相同类型的元素的集合所组成的数据结构,分配一块连续的内存来存储.利用元素的索引可以计算出该元素对应的存储地址. 最简 ...

  6. java json删除指定元素_简洁而优雅,Python Tablib实现将数据导出为Excel, Json等N种格式...

    遇见 Tablib 我们在 Python 实际开发过程中,经常涉及将数据导出为 Excel.Csv.Yaml.Json 等各种格式的文件的需求,一些粗鲁的实现方式是通过安装各种第三方模块以支持不同格式 ...

  7. java中线性表删除元素和删除指定元素_线性表的插入和删除(Java版)

    1.线性表的定义: (1).线性表是一种可以在任意位置插入和删除数据元素操作.由n(n≥0)个相同类型数据元素a0, a1,-, an-1组成的线性结构.除了第一个元素没有前驱元素和最后一个元素没有后 ...

  8. swf缓存文件在哪里_面试官:mybatis一级缓存二级缓存的区别都不知道,知道门在哪吧...

    面试官:虫虫你简历上写了了解mybatis缓存,那你能说说一级缓存和二级缓存的区别吗? 虫虫:我只知道这是用来缓存sql查询的数据 面试官:没了? 虫虫:没了 面试官:公司门知道在哪里吧 自己走还是我 ...

  9. access建立两个字段唯一索引_面试官:谈谈你对mysql索引的认识?

    引言 这篇我们就来谈谈关于索引方面的mysql面试题.还是老规矩,讲的是在Innodb存储引擎下的情形,毕竟我还真没用过Mysiam之类的存储引擎. ps:其实很早就想写了,一直偷懒! 其实这下面每个 ...

最新文章

  1. 【蓝桥杯】【入门题】【算法提高VIP】1480:模拟计算器
  2. Python pyd pyc
  3. 广域网优化产品的5大应用场景—Vecloud
  4. Java快速生成20亿数字_关于内存:Java-打印10亿到20亿
  5. 历数2013年优秀的开源游戏引擎与开源游戏项目
  6. 实验干货分享:用Go语言实现分布式缓存开发之map
  7. 科普漫画 | 沙子如何变成芯片?
  8. 表单按钮实现 type=image
  9. php sem acquire,PHP | 关于php中sem_get failed for key no space left on device问题的解决方案...
  10. WinDbg 命令三部曲:(一)WinDbg 命令手册
  11. 从一个简单的Java单例示例谈谈并发
  12. mysql udf安全_打造全功能MYSQL入侵UDF
  13. python flask 分页_python flask实现分页效果
  14. 总结:86版五笔输入法
  15. 微信联盟链接不到服务器怎么,LOL微信登不上去怎么办?微信登不上解决方法推荐...
  16. matlab三个商人三个随从,数学建模 商人过河
  17. Gopher China 2021,未来可期
  18. 【FOMO3d】 的隐藏彩(lou)蛋(dong)
  19. 干货推荐!13 个技术电子书资源站,从此看书不求人
  20. 6级20190601

热门文章

  1. 计算机丢失qt4core.dll,qtcore4.;dll文件丢失。怎么办?
  2. java sqlserver 2000_谁能救救我啊,关于JAVA连接SQLserver2000
  3. python 匿名函数捕获变量值 (执行时的值)
  4. 2道python基础练习
  5. python 中五种常用的数据类型
  6. Python 爬虫浏览器伪装技术
  7. 接受java的返回值_java怎样接受 到return的值的?
  8. 标注反向优化 生成全体测试集空标注(无需坐标、只要送给权重evaluate即可)predicted
  9. python numpy.mean() axis参数使用方法【sum(axis=*)是求和,mean(axis=*)是求平均值】
  10. linux下的ppp软件,linux下ppp拨号无线上网(示例代码)