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