ArrayList,与LinkedList都是属于实现了List接口的类。首先从名字前缀开始看  ,Array表示数组,Link表示链表。

所以ArrayList底层是基于动态数组的。而LinkedList底层是基于双向链表的。

ArrayList必须是连续内存的,而LinkedList不要求连续内存。

ArrayList查询快,增加和删除慢;LinkedList增加和删除快,查询慢。

ArrayList 底层为动态数组,所以查询时是直接通过访问下标,查询效率高。而增加而删除时,为了保证内存的连续,增加和删除某一位置后,后方元素都得向前移动一位,

最坏情况就是删除第一个元素,则后面第2个到第n个元素都得往前移动一位。所以增加删除慢。

LinkedList底层为双向链表,不必保证内存上的连续,所以增删快,而查询时必须要经历从头到尾的遍历,所以查询慢。

为什么说ArrayList是基于动态数组呢?一般的数组,容量确定了就不可以再更改,也无法超过。但是ArrarList可以,

例如当数组元素数已满时调用了add方法向尾部添加一个元素,则此时会进行扩容,ArrayList会自动创建一个更大的数组,并将所有元素拷贝到新数组中,而原数组会被抛弃,

会被GC回收。扩容后新数组的容量为原来的1.5倍。

最新文章

  1. mysql表单输入数据出现中文乱码解决方法
  2. 第三章 --- 关于Javascript 设计模式 之 代理模式
  3. webView文本长按显示英文
  4. 软件工程(QLGY2015)第一次作业小结(含成绩)
  5. netfilter
  6. laravel url管理与使用
  7. acm-DP整理
  8. [POJ 2019] Cornfields
  9. Xcode - 详解真机测试步骤
  10. Java面试题集(1-50)
  11. Nginx均衡负载(IP_HASH)未生效
  12. “一切都是消息”--MSF(消息服务框架)入门简介
  13. Ubuntu 16.04 为 root 帐号开启 SSH 登录
  14. Java 构造器 考虑用静态构造方法代替构造器
  15. Effective Java 第三版——69. 仅在发生异常的条件下使用异常
  16. 02-HTML5新的input属性
  17. Linux修复系统命令
  18. Objective-C KVC讲解,包你看懂会用
  19. 2016.6.17——Valid Parentheses
  20. 稀疏数据压缩查询方法:Rank & Select 操作

热门文章

  1. Java分布式:分布式服务框架——ZooKeeper
  2. 配置SSH无密码登录【原著】
  3. xunit 单元测试
  4. 在Grafana使用普罗米修斯
  5. Three.js场景的基本组件
  6. Java 将 PPT 形状(表格、文本框、心形、图表等)保存成图片
  7. sql语句修改数据库字段的长度
  8. TCP Socket 套接字 和 粘包问题
  9. Python之路【第十九篇】:前端CSS
  10. 深度学习-Wasserstein GAN论文理解笔记