LinkedList集合特点就是增删快,查询慢,这种特性的主要原因就是其内部是通过链表来做为存储数据的数据结构,先看下内部整体结构。
LinkedList整体结构
这里主可以看到,和ArrayList的继承结构大致差不多,这里LinkedList实现了Queue,可以实现一些队列的操作,先带大家看下LinkedList的内部的Node内部类的结构,这个是完成数据存储的核心部分,所有的操作都是围绕Node来展开的。
private static class Node<E> {
E item;
Node next;
Node prev;
Node(Node prev, E element, Node next) {
this.item = element;this.next = next;this.prev = prev;
}
}
Node是LinkedList的静态内部类,主要就是三个变量,一个就是真正要存入的值,一个是是后继结点,一个是前驱结点,可以看出这是个双向链表,只提供了一个构造函数,完成数据的存储,可以看出数据结构的精美,几行代码就构筑了整个LinkedList的基石。
transient Node last;
/*
* 记录集合长度
*//**
* 链表的尾节点
*/
构造函数解析
public LinkedList(Collection extends E> c) {
this();
addAll(c);
}
传入一个集合,主要就是通过调用addAll方法来完成数据的插入。
public boolean addAll(int index, Collection extends E> c) {
checkPositionIndex(index);
Object[] a = c.toArray();//转成数组
int numNew = a.length;//获取数组长度