ArrayList 和 LinkedList 浅读

334 阅读1分钟

集合框架体系图:

ArrayList

ArrayList是一个泛型类,长度动态,不受限制,只能存储对象。例:ArrayList<String> list = new ArrayList<String>();
ArrayList继承于接口List,是一个List的实现类。

LinkedList

LinkedList继承于AbstractSequentialList,一个双向链表,可被当作堆栈,队列或者双端队列使用。
节点类Entry:element存放业务数据,previous与next存放前后节点信息。

双向链表结构数据图:

实现get(int location), remove(int location)等根据索引值来获取,删除节点的函数。首先比较location和双向链表长度的1/2,决定从头还是尾开始查找(for循环)。

ArrayList 和 LinkedList 的区别

本质上是数组和链表数据结构上的区别。

  1. ArrayList插入元素后,需要移动插入位置后的所有元素,LinkedList有在头尾增删的方法。(没有ArrayList的扩容问题)
  2. ArrayList执行get(int index),直接返回index上的元素。
  3. ArrayList耗时在System.arraycopy,LinkedList耗时在查找数据。
  4. ArrayList内存使用量大,添加元素效率低,随机访问效率高,LinkedList相反。