网站建设公司的未来,网站策划书预期风险,wordpress 问答模块,越策网站建设这里写目录标题 简介源码解读基础变量构造函数LinkedList()LinkedList(Collection? extends E c) 总结 简介
LinkedList 是对 Java 集合框架中 List 接口的一种具体实现#xff0c;归属于线性数据结构的范畴。其核心内部结构是通过双向链表#xff08;double-linke… 这里写目录标题 简介源码解读基础变量构造函数LinkedList()LinkedList(Collection? extends E c) 总结 简介
LinkedList 是对 Java 集合框架中 List 接口的一种具体实现归属于线性数据结构的范畴。其核心内部结构是通过双向链表double-linked list来实现的这使得它在元素插入、删除操作上具备较高的效率尤其是在列表的首尾进行操作时。
相较于数组实现的列表如 ArrayListLinkedList 在非索引访问或遍历操作上可能效率较低。 LinkedList 类继承自 AbstractList 抽象类并且实现了 List 接口以及标记接口 Serializable。通过实现 Serializable 接口ArrayList 集合的实例能够支持序列化过程从而允许对象的状态被转换成可以存储或传输的形式用于网络传输或保存到文件等。 源码解读
基础变量
// 记录元素个数
transient int size 0;// 当前节点的前一个结点
transient NodeE first;// 当前节点的后一个结点
transient NodeE last;// 初始化结点
private static class NodeE {E item;NodeE next;NodeE prev;Node(NodeE prev, E element, NodeE next) {this.item element;this.next next;this.prev prev;}
}构造函数
LinkedList()
构造一个空链表。
public LinkedList() {}LinkedList(Collection? extends E c)
传入一个 Collection 的子类集合将元素存储到 LinkedList。
public LinkedList(Collection? extends E c) {this();addAll(c);
}addAll©
public boolean addAll(Collection? extends E c) {// size链表长度这里作为开始添加新元素的位置return addAll(size, c);
}addAll(size, c)
public boolean addAll(int index, Collection? extends E c) {// 判断 index 是否超出范围index 0 index sizecheckPositionIndex(index);// 将集合转为数组Object[] a c.toArray();int numNew a.length; // 数组长度if (numNew 0)return false;// 初始化前结点、后结点NodeE pred, succ;// 如果index size说明实在链表的末尾添加后继节点为null前驱节点为最后一个节点if (index size) {succ null;pred last;} else {// 否则找到指定索引位置的节点作为后继节点并找到其前驱节点succ node(index);pred succ.prev;}// 遍历数组a将每个元素添加到链表中for (Object o : a) {SuppressWarnings(unchecked) E e (E) o;// 创建新节点前驱为pred元素为e后继为null暂时NodeE newNode new Node(pred, e, null);// 如果前驱节点为null说明新节点是第一个节点if (pred null)first newNode;// 否则将新节点链接到前驱节点的后面elsepred.next newNode;pred newNode;}// 如果后继节点为null说明是在链表末尾添加更新最后一个节点为predif (succ null) {last pred;} // 否则将新添加的最后一个节点链接到原来的后继节点else {pred.next succ;succ.prev pred;}// 更新链表的大小size numNew;modCount; // 修改次数return true;
}总结
数据结构底层结构线程安全执行效率ArrayList可变数组 Object[] elementData线程不同步、不安全查询效率搞、增删效率低LinkedList双向链表线程不同步、不安全增删效率搞、查询效率低