Java ArrayList与LinkedList数据结构和特点

1. ArrayList

数据结构:

  1. ArrayList低层是实现的是一个Object类型的数组(空间连续,类型相同)
  2. 当我们调用ArrayList无参构造方法,将会创建一个Object类型的****数组
  3. 当我们第一次添加元素的时候,数组的长度会被修改为10
  4. 后续添加元素,如果数组长度不够则扩容,扩容为原数组的1.5倍

特点:有序,可重复,允许元素为null

  1. 查询,修改快:可以通过下标一次查询定位元素,所以效率高
  2. 增加,删除慢:数组的空间是连续的,移动某个元素时,其余大部分数组也会移动,所以效率低
  3. 线程不安全

2.LinkedList

数据结构:

  1. LinkedList低层是双向链表,链表中的每一个元素称呼为一个Node(节点),每个Node包含三部分:上个元素的引用、下一个元素的引用、当前元素本身

特点:有序,空间不连续,允许元素为null,允许重复,线程不安全

  1. 增加,删除快:不需要移动元素(改变引用指向),也不需要扩容(改变引用指向),因此效率较高
  2. 查询,修改慢:因为链表不能直接定位到某个元素,必须找到相邻的元素,所以查询效率低,同理修改效率也低

注意:get(int index)方法中,对下标查询做了优化,如果是大于等于长度,则从后往前找,否则从前往后找,以提高查询效率,但是依然很慢

Java ArrayList与LinkedList数据结构和特点相关推荐

  1. [Java] ArrayList、LinkedList、Vector的区别

    版权声明:请尊重个人劳动成果,转载注明出处,谢谢! 首先我们来看一下继承关系: 我们可以看出ArrayList.LinkedList.Vector都实现了List的接口.  接下来分别看一下三个数据结 ...

  2. Java ArrayList、LinkedList和Vector的使用及性能分析

    第1部分 List概括 List 是一个接口,它继承于Collection的接口.它代表着有序的队列. AbstractList 是一个抽象类,它继承于AbstractCollection.Abstr ...

  3. Java中的LinkedList

    介绍: LinkedList是由节点组成的线性数据结构. 在单链列表中,每个节点包含数据和引用. 在此,参考部分引用链表中的下一个节点. 另一方面,在双链表中,我们具有指向上一个和下一个节点的数据和引 ...

  4. JAVA 基本数据结构--数组、链表、ArrayList、Linkedlist、hashmap、hashtab

    JAVA 基本数据结构(转载) --数组.链表.ArrayList.Linkedlist.hashmap.hashtab

  5. java arraylist和list_Java中ArrayList和LinkedList区别

    原文链接:http://pengcqu.iteye.com/blog/502676 一般大家都知道ArrayList和LinkedList的大致区别: 1.ArrayList是实现了基于动态数组的数据 ...

  6. java什么时候用list_Java快问快答:用 ArrayList 还是 LinkedList?

    问题: 通常我会这么定义列表: List names = new ArrayList<>() names类型使用List接口,那么具体实现该如何选择. 什么时候应该用LinkedList替 ...

  7. 深入理解java中的ArrayList和LinkedList

    杂谈最基本数据结构--"线性表": 表结构是一种最基本的数据结构,最常见的实现是数组,几乎在每个程序每一种开发语言中都提供了数组这个顺序存储的线性表结构实现. 什么是线性表? 由0 ...

  8. Java中ArrayList和LinkedList区别

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

  9. Java集合:ArrayList和LinkedList区别?

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

最新文章

  1. 什么是“自然语言处理”? 它到底在“处理”些什么?
  2. mysql远程连接授权
  3. Windows上打开大文件的工具
  4. mysql 游标的使用
  5. (转)创业需要知道的13句话
  6. C++确定数字的奇偶校验的算法实现(附完整源码)
  7. Hibernate锁定模式– OPTIMISTIC_FORCE_INCREMENT锁定模式如何工作
  8. oracle启动监听读取哪个文件,监听服务启动及数据文件恢复oracle数据库
  9. oracle的EMCTL
  10. ubuntu1604安装tensorflow
  11. 简述与oracle相关的程序组,北语网院18秋《Oracle数据库开发》作业_4答案
  12. 关于svn、git生成版本号脚本的改进
  13. Java内存与垃圾回收调优
  14. OpenCV-图像处理(15、自定义线性滤波)
  15. 灰色系统理论及其应用 (四) :灰色模型 GM
  16. 【Lua基础系列】之热更新
  17. jQuery基础(菜鸟教程,建议收藏不然怕你后悔!)
  18. 自然资源一体化平台(一站式服务平台)
  19. android adb修复工具,Android——adb修复build.prop
  20. Markdown插入url图片

热门文章

  1. 避免大规模故障的微服务架构设计之道
  2. java 数组数据类型_java基本数据类型和数组
  3. key redis 遍历_快乐运维Redis大数据量查询与清理
  4. echarts 折线图 html模板,设置ECharts折线图的提示框
  5. 企业微信_Windows版本调试
  6. uniapp 封装网络请求
  7. DMN结合bpmn简化流程_07
  8. (vue基础试炼_03)使用vue.js实现TodoList
  9. Tomcat10 开机启动 Linux环境
  10. Java中的序列化与反序列化机制