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
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
相关文章推荐
- Java容器类浅析四----ArrayList和LinkedList的存取原理
- 对ArrayList和LinkedList底层实现原理详解
- ArrayList和LinkedList底层实现原理
- jdk 容器之 ArrayList,LinkedList 原理简述
- 集合List和ArrayList等实现类的底层原理分析
- Java集合---LinkedList底层原理
- Java基础之集合List-ArrayList、LinkedList、Vector的底层实现和区别
- 第15天 迭代器以及ArrayList、LinkedList原理
- Java的数据结构相关的类实现原理,比如LinkedList,ArrayList,HashMap,TreeMap
- List-ArrayList、LinkedList、Vector的底层实现和区别
- linkedlist和arraylist底层实现,linkedlist的内部构造
- ArrayList和LinkedList底层实现的区别
- HashMap、LinkedHashMap、ConcurrentHashMap、ArrayList、LinkedList 底层实现
- LinkedList的实现原理浅析
- java中ArrayList与LinkedList的原理及区别
- ArrayList、LinkedList、HashMap底层实现
- ArrayList、LinkedList、HashMap的底层实现
- ArrayList和LinkedList底层实现的区别
- ArrayList和LinkedList中的get方法底层实现
- 浅析Java集合类源码(一)--- Vector, ArrayList, LinkedList