LinkedList底层实现与操作

简介: LinkedList底层实现与操作

LinkedList

底层操作机制

  1. LinkedList底层维护了一个双向链表
  2. LinkedList中维护了两个属性first和last分别指向首节点和尾结点
  3. 每个节点(Node对象),里面又维护了prev、next、item三个属性,其中通过prev指向前一个,通过next指向后一个节点。最终实现双向链表
  4. 添加和删除不是通过数组完成的,相对来说效率比较高

实现代码

public class LinkedList<E>
    extends AbstractSequentialList<E>
    implements List<E>, Deque<E>, Cloneable, java.io.Serializable{
       
    transient int size = 0;    // 链表长度
 
    transient Node<E> first;    // 链表头指针
 
    transient Node<E> last;     // 链表尾指针
 
    // 链表节点。一个私有静态内部类
    private static class Node<E> {
        E item;
        Node<E> next;
        Node<E> prev;
 
        Node(Node<E> prev, E element, Node<E> next) {
            this.item = element;
            this.next = next;
            this.prev = prev;
        }
    }

添加一个e节点

    public boolean add(E e) {
        linkLast(e);
        return true;
    }
 
    void linkLast(E e) {
        final Node<E> l = last;                           // 保存尾节点
        final Node<E> newNode = new Node<>(l, e, null);    // 创建插入节点
        last = newNode;
        if (l == null)        // 链表中还没有数据
            first = newNode;
        else
            l.next = newNode;    // 将新节点添加到链表尾部
        size++;
        modCount++;
    }

遍历并找到index节点

    public E get(int index) {
        checkElementIndex(index);
        return node(index).item;
    }
 
    Node<E> node(int index) {
        if (index < (size >> 1)) {    // size二进制右移一位,即size/2。从头往尾遍历
            Node<E> x = first;
            for (int i = 0; i < index; i++)
                x = x.next;
            return x;
        } else {                        // 从尾往头遍历
            Node<E> x = last;
            for (int i = size - 1; i > index; i--)
                x = x.prev;
            return x;
        }
    }
相关文章
|
消息中间件 监控 安全
云消息队列 Confluent 版正式上线
云消息队列 Confluent 版正式上线!
968 103
|
域名解析 网络协议 安全
信息收集的工具你听过几种(盘点信息收集)
信息收集的工具你听过几种(盘点信息收集)
信息收集的工具你听过几种(盘点信息收集)
|
存储 数据建模 数据库
初探多维表格
最近调研学习了一些多维表格产品,记录一下自己收获的基础认知。在线表格的基础结构是单元格,横向纵向拓展的单元格的集合,就构成了一张工作表。单元格之间可以任意关联,非常灵活。在线表格的适用面很广,能够在数据收集和分析、财会统计等场景发挥重要的作用。在我试图寻找国外的多维表格产品时,发现很少有用「表格」来描述自己的。比如 Airtable 对自己的介绍是:一个构建协同应用的低代码平台。目前国内处于前沿的
1553 0
初探多维表格
|
存储 资源调度 监控
|
算法 安全 网络安全
|
IDE 开发工具 图形学
Visual Basic游戏开发:进入娱乐世界的编程
【4月更文挑战第27天】本文引导初学者使用Visual Basic进行游戏开发,强调其易学性、图形支持和Windows兼容性。通过搭建开发环境、学习基础语法,从“猜数字”到“贪吃蛇”游戏实例,逐步进阶。此外,探讨了性能优化、引入游戏引擎和多媒体音效等高级技巧,鼓励开发者用VB开启游戏编程之旅,创造自己的娱乐世界。
396 0
|
机器学习/深度学习 存储 监控
基于YOLOv8深度学习的智能小麦害虫检测识别系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战
基于YOLOv8深度学习的智能小麦害虫检测识别系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战
|
存储 弹性计算 安全
2024年阿里云服务器2核2G和2核4G配置可选实例规格及收费标准与优惠价格参考
阿里云服务器2核2G和2核4G配置可选实例规格及价格是多少?根据阿里云2024年的收费标准及活动价格来看,2核2G配置轻量应用服务器的最优惠的价格是61元1年,云服务器2核2G配置的价格为99元1年,轻量应用服务器2核4G的价格为165元1年,通用算力型u1实例2核4G的价格为199元1年。不同实例的价格有所不同,下面是2核2G和2核4G配置可选实例规格详解及优惠价格参考。
2024年阿里云服务器2核2G和2核4G配置可选实例规格及收费标准与优惠价格参考
|
分布式计算 监控 Hadoop
Hadoop权限问题
【5月更文挑战第6天】Hadoop权限问题
551 1
|
机器学习/深度学习 算法 Go
中科院医学2区7.4分|双疾病思路,学习一下cMAP
这篇研究通过综合生物信息学分析和机器学习,探讨了慢性肾脏病(CKD)与钙化性主动脉瓣疾病(CAVD)之间的关联,发现了17个潜在的诊断标志物,并构建了基于SLPI/MMP9的CAVD诊断列线图。该研究揭示了CKD相关CAVD的免疫途径,为未来血清诊断和治疗提供了新视角。文章发表在《Journal of Translational Medicine》上,IF为7.4。
535 0