集合框架体系图:
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 的区别
本质上是数组和链表数据结构上的区别。
- ArrayList插入元素后,需要移动插入位置后的所有元素,LinkedList有在头尾增删的方法。(没有ArrayList的扩容问题)
- ArrayList执行
get(int index)
,直接返回index上的元素。 - ArrayList耗时在
System.arraycopy
,LinkedList耗时在查找数据。 - ArrayList内存使用量大,添加元素效率低,随机访问效率高,LinkedList相反。