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;
        }
    }
相关文章
|
安全 网络安全 数据安全/隐私保护
Flask 入门系列教程(六)
Flask 入门系列教程(六)
262 0
|
存储 资源调度 监控
|
计算机视觉 Python
python基于opencv工具掌纹主线提取
我们将在这篇文章中使用Python和OpenCV库来找出我们手掌中的主线。
|
算法 安全 网络安全
|
8月前
|
自然语言处理 搜索推荐 机器人
合力亿捷云客服系统:2025年大模型如何重塑全渠道对话体验
2025年,以DeepSeek等大模型为核心的智能客服系统,突破传统效率瓶颈,通过全渠道整合、多模态交互、个性化服务与情感智能,重构企业客户互动模式。从机械应答到认知共情,从单一文本到多维交互,大模型赋能客服系统成为企业价值创造的战略资产,推动客户服务迈向智能化新纪元。
352 2
|
11月前
|
机器学习/深度学习 人工智能 算法
《探秘Q-learning:解锁其背后的基本假设》
Q-learning是强化学习领域的重要算法,广泛应用于机器人控制、游戏策略和资源管理等场景。它基于马尔可夫决策过程假设,认为未来状态仅依赖当前状态和动作,简化了问题复杂度。此外,Q-learning还假设奖励可量化、环境具有重复性、学习时间无限及动作离散,这些假设为智能体提供了明确的学习目标和机制,使其能高效地探索最优策略。尽管现实情况未必完全符合这些假设,Q-learning及其变种算法已在多个领域取得了显著成功。
276 28
|
机器学习/深度学习 自然语言处理 语音技术
探索深度学习中的Transformer模型及其在自然语言处理中的应用
探索深度学习中的Transformer模型及其在自然语言处理中的应用
574 5
|
弹性计算 编解码 Kubernetes
什么是云XX产品?提防虚假噱头产品
随着云计算技术的普及,企业和个人用户纷纷选择云产品。然而,市场上存在许多虚假的“云”产品,令人难以辨别。本文介绍了云产品的核心特性,如弹性伸缩、按需付费、高可用性和管理自动化,并提供了如何避免被虚假产品误导的建议。选择知名云服务商、了解核心特性和阅读服务等级协议是关键。
382 3
MATLAB实战 | APP设计
生成一个用于观察视点仰角和坐标轴着色方式对三维图形显示效果影响的App,界面如图1所示。界面右上部的列表框用于选择绘图数据、切换按钮组用于选择绘图方法,中间的旋钮用于设置视点方位角和仰角,右下部的分档旋钮用于设置坐标轴着色方式、跷板开关用于显示网格线。
746 7
MATLAB实战 | APP设计
07——驾校科目一考试系统——布局题库
如果需要题库的资料(exam.txt)可以留下邮箱,博主会发给大家的。 总代码
285 1