本文共 1711 字,大约阅读时间需要 5 分钟。
Java集合框架-Collection子接口之一-List接口-LinkedList源码分析
LinkedList类概述
LinkedList是Java集合框架中List接口的一个实现类,属于Collection子接口的一部分。它采用双向链表的结构,内部没有使用数组来存储元素,而是通过定义内部类Node来实现元素的存储。每个Node节点包含三个成员变量:item用于存储元素的值,next用于指向下一个节点,prev用于指向前一个节点。Node类通过构造函数接受这三个参数并赋值给自身成员变量。
Node类的定义
private static class Node { E item; Node next; Node prev; Node(Node prev, E element, Node next) { this.item = element; this.next = next; this.prev = prev; }} Node类的构造函数接受三个参数:前一个节点(prev)、当前节点的元素(element)和下一个节点(next)。然后将这三个参数分别赋值给自身的prev、item和next成员变量。Node类是LinkedList中存储元素的基本结构单元。
LinkedList的构造器
LinkedList类有两个构造器:
公默认构造器:
public LinkedList() {}这个构造器不初始化任何内容,仅初始化成员变量size为0。
接受Collection参数的构造器:
public LinkedList(Collection c) { this(); addAll(c);}这个构造器接受一个Collection对象c,将其内容添加到LinkedList中。它首先调用自身的构造器,然后调用addAll方法将c中的所有元素添加到LinkedList中。
添加元素的方法
添加元素的方法add(E e)调用linkLast(E e)来执行尾插法操作。linkLast方法的实现步骤如下:
last属性。- 如果为空(说明新节点是第一个节点),则将LinkedList的
first属性赋值为新节点。 - 如果不为空,则将当前末尾节点l的
next属性赋值为新节点。
size。modCount。public boolean add(E e) { linkLast(e); return true;}void linkLast(E e) { final Node l = last; final Node newNode = new Node(l, e, null); last = newNode; if (l == null) { first = newNode; } else { l.next = newNode; } size++; modCount++;} 总结
LinkedList类通过双向链表的结构实现了List接口的功能。其内部使用Node类作为存储单元,每个Node节点包含一个元素以及指向前后节点的指针。添加元素时采用尾插法,插入新节点到链表末尾,调整首尾指针和相邻节点的指针。由于 LinkedList采用链表结构,其在进行插入和删除操作时时间复杂度为O(1),但在处理链表断裂(如删除中间节点)时需要额外的操作,可能导致性能上的损耗。
通过构造器接受Collection参数,用户可以将已有的Collection对象直接添加到LinkedList中,简化了初始化过程。这种设计使得LinkedList在某些场景下更加灵活和便捷。
发表评论
最新留言
关于作者