ArrayList是采用数组形式保存对象,其特色是:查询快,增删慢。数组
LinkedList是采用链式存储,经过节点直接彼此链接来实现的,其特色是:查询慢,增删快。性能
具体解释:spa
ArrayList实际上是包装了一个数组 Object[],当实例化一个ArrayList时,一个数组也被实例化,当向ArrayList中添加对象是,数组的大小也相应的改变。这样就带来如下有缺点:对象
快速随即访问 你能够随即访问每一个元素而不用考虑性能问题,经过调用get(i)方法来访问下标为i的数组元素。内存
向其中添加对象速度慢 当你建立数组是并不能肯定其容量,因此当改变这个数组时就必须在内存中作不少事情。get
操做其中对象的速度慢 当你要想数组中任意两个元素中间添加对象时,数组须要移动全部后面的对象。基础
ArrayList的初始默认长度是10,当长度不够时,会自动建立一个新的ArrayList,长度在原有的基础上增长50%, 即:15,同时把原有的数据放到新的ArrayList中,再把新数据插入到新的ArrayList。List
LinkedList是经过节点直接彼此链接来实现的。每个节点都包含前一个节点的引用、后一个节点的引用和节点存储的值。当插入一个新的节点时,只须要修改其中保存的先后关系的节点的引用便可,当删除记录时也是同样。遍历
这样就带来如下有缺点:
操做其中对象的速度快 只须要改变链接,新的节点能够在内存中的任何地方
不能随即访问 虽然存在get()方法,可是这个方法是经过遍历接点来定位的因此速度慢。引用
如下是他们大致的图形: ArrayList: 【】【】【】【】【】【】【】【】 他就是一个数组的形状; LinkedList: 【】 _【】 __【】 ___【】