您的位置:首页 > 编程语言 > Java开发

JDK1.7中LinkedList和ArrayList底层原理浅析

2018-03-27 18:33 405 查看
LinkedList集合与ArrayList集合的区别是底层的实现原理也不一样。LinkedList底层是通过一个双向链表实现(在jdk1.6及以前,是一个循环的双向链表),而ArrayList是通过数组实现的。
LinkedList
LinkedList可以进行所有List的操作,因为其实现了List接口,同时LinkedList可以存放任何元素,包括null;
所有根据索引的查找操作都是按照双向链表的需要执行的,根据索引从前或从后开始搜索,并且从最靠近索引的一端开始。例如一个LindedList有5个元素,如果调用了get(2)方法,LinkedList将会从头开始搜索;如果调用get(4)方法,那么LinkedList将会从后向前搜索。这样做的目的可以提升查找效率。LinkedList中通过Node(int index)方法,它会判断从头或者从后开始查找比较快
LinkedList是非线程安全
LinedList的迭代器 iterator 和 listIterator 方法返回的迭代器是快速失败的。意思就是如果在迭代器已经创建了的情况下,任何时刻对LinkedList结构的修改,迭代器将会抛出一个ConcurrentModificationException异常
LinkedList每个节点是一个Node类型的实例,每个Node实例保存了节点的真实值、节点的前一个节点的引用和后一个节点的引用

ArrayList
 允许元素为空、允许重复元素;有序,即插入顺序和访问顺序一致;非同步
扩容机制:newCapacity=oldCapacity+ordCapacity/2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: