LinkList集合详解

2023-10-30

LinkList集合详解

1、LinkedList简介

  • LinkedList类是一个继承于AbstractSequentialList的双向循环链表,它是非同步的,也是非线程安全的。
  • LinkedList实现了List接口,能对它进行队列操作。
  • LinkedList实现了Deque接口,能当作双端队列操作
  • LinkedList实现了CloneClass接口,能进行克隆操作。
  • LinkedList实现了SerialiableClass接口,能进行序列化操作。

2、List数据结构

  • LinkedList包含两种构造函数,一种是无参构造,另一种是有参构造,他的Node对象是一个静态内部类,包含了pre、next、element
	//指向第一个节点的指针
    transient Node<E> first;
	//指向指针的最后一个节点
    transient Node<E> last;
	//数据的个数
	transient int size = 0;
	//构造函数
    public LinkedList() {
    }
    public LinkedList(Collection<? extends E> c) {
        this();
        addAll(c);
    }
//节点
    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;
        }
    }

3、添加元素

  • 添加元素last指针向后移动,size+1,操作次数+1
    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++;
    }

4、删除元素

  • 删除元素有多种方法,根据Object删除和根据index删除。
    //根据object删除,遍历找到删除node
public boolean remove(Object o) {
        if (o == null) {
            for (Node<E> x = first; x != null; x = x.next) {
                if (x.item == null) {
                    unlink(x);
                    return true;
                }
            }
        } else {
            for (Node<E> x = first; x != null; x = x.next) {
                if (o.equals(x.item)) {
                    unlink(x);
                    return true;
                }
            }
        }
        return false;
    }
    E unlink(Node<E> x) {
        // assert x != null;
        final E element = x.item;
        final Node<E> next = x.next;
        final Node<E> prev = x.prev;

        if (prev == null) {
            first = next;
        } else {
            prev.next = next;
            x.prev = null;
        }

        if (next == null) {
            last = prev;
        } else {
            next.prev = prev;
            x.next = null;
        }

        x.item = null;
        size--;
        modCount++;
        return element;
    }

//根据index删除
    public E remove(int index) {
        checkElementIndex(index);
        return unlink(node(index));
    }

5、和ArrayList比较

  • 顺序插入的话ArrayList比较快,因为ArrayList基于数组实现的,只要望指定位置加一个数据即可,但是LinkedList顺序插入时,需要创建一个对象。
  • LinkList比ArrayList更加耗内存,因为LinkedList里面不仅维护了待插入的元素,还维护了Entry的前置Entry和后继Entry。
  • LinkedList和ArrayList插入和删除
  • LiskedList做插入和删除操作时,慢在寻址,快在只需要改变前后entry的应用地址
  • ArrayList做插入和删除操作时,快在寻址,慢数组的批量copy。
  • 针对各自的遍历最高的方式,ArrayList遍历效率要比LinkedList效率普片要高一点。
  • ArrayList实现了RandomAccess接口,LinkedList没有实现,所以ArrayList用for遍历更快,LinkedList用foreach遍历更快。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LinkList集合详解 的相关文章

随机推荐

  • Qt之QCheckBox

    简述 QCheckBox继承自QAbstractButton 它提供了一个带文本标签的复选框 QCheckBox 复选框 和QRadioButton 单选框 都是选项按钮 这是因为它们都可以在开 选中 或者关 未选中 之间切换 区别是对用户
  • 微型计算机三部分基本组成,微型计算机系统的组成

    描述 硬件部分 1 中央处理器 中央处理器 Central Processing Unit CPU 制作在一块集成电路芯片上 也称为微处理器 Micro Processor Unit MPU 计算机利用中央处理器处理数据 利用存储器来存储数
  • Tomcat 调优之从 Linux 内核源码层面看 Tcp backlog

    优质资源分享 学习路线指引 点击解锁 知识定位 人群定位 Python实战微信订餐小程序 进阶级 本课程是python flask 微信小程序的完美结合 从项目搭建到腾讯云部署上线 打造一个全栈订餐系统 Python量化交易实战 入门级 手
  • 【deepspeed】【训练】【交互】【wandb】训练过程中的wandb交互如何去除

    问题 gpt模型训练时 中间有询问输入账户 交互式的询问影响自动执行脚本 询问是这样的 解决办法 在脚本中设置环境变量 关闭wandb 如下图 其他 log中没有显示脚本的完整路径 顺着log中前面的脚本路径 找到了这个脚本 是和框架的其他
  • 28句话,句句触动你的心

    author skate time 2010 06 01 1 莎士比亚说 再好的东西都有失去的一天 再深的记忆也有淡忘的一天 再爱的人 也有远走的一天 再美的梦也有苏醒的一天 该放弃的决不挽留 该珍惜的决不放手 分手后不可以做朋友 因为彼此
  • 3.5 ICMP不可达报文的处理

    在三次握手阶段有两种情况TCP会收到ICMP 目的不可达 报文 1 client端通过connect系统调用发送SYN请求到server端后 server没有进程在相应的地址或端口处理请求 这时client端会收到ICMP不可达报文 2 c
  • Correct single, compatible version of XXX

    maven包冲突问题 问题分析 解决方法 问题分析 1 Failed to start component StandardEngine Catalina StandardHost localhost 2 Correct single co
  • 【浅析python 中__name__ = ‘__main__‘ 的作用】

    很多新手刚开始学习python的时候经常会看到python 中 name main 这样的代码 可能很多新手一开始学习的时候都比较疑惑 python 中 name main 的作用 到底干嘛的 有句话经典的概括了这段代码的意义 Make a
  • 智能学习

    智能学习 MATLAB实现TLBO教学学习优化算法的图像特征提取 目录 智能学习 MATLAB实现TLBO教学学习优化算法的图像特征提取 基本介绍 模型描述 程序设计 参考资料 基本介绍 MATLAB实现TLBO教学学习优化算法的图像特征提
  • python语法-MySQL(DDL数据定义)

    python语法 MySQL数据库 sql语言的分类 DDL数据定义 DML数据操作 DCL数据控制 DQL数据查询 SQL的语法特征 1 sql语言大小写不敏感 2 sql可以单行或者多行书写 最后以 号结束 3 sql支持注释 单行注释
  • 找不到mybatis的mybatis-config.xml配置文件

    初学mybatis出现过好几次找不到配置文件的问题 今天练习一个小项目又出现这个问题 排查了之前出现的错误 都没有解决问题 后来发现是自己粗心大意 把从mybatis官网中复制的调用生成mysqlsessionFactory的代码直接复制过
  • 【Ei检索】2022年计算语言学和自然语言处理国际会议(CLNLP 2022)

    2022年计算语言学和自然语言处理国际会议 CLNLP 2022 重要信息 会议网址 www clnlp org 会议时间 2022年12月16 18日 召开地点 中国北京 截稿时间 2022年10月31日 录用通知 投稿后2周内 收录检索
  • GridView编辑删除操作

    第一种 使用DataSource数据源中自带的编辑删除方法 这种不常用 在这里就不加说明了 第二种 使用GridView的三种事件 GridView1 RowEditing 编辑 GridView1 RowUpdating 更新 GridV
  • 胡小明:城市大脑与人脑不同的数据意识

    一 数据应用要区别对待 1 2 数据应用比数据收集重要 大数据热正在席卷全国 许多地方政府都成立大数据局 统管政府的数据资源并将数据收集摆在第一位 数据应用研究却迟迟跟不上 投资不断增长应用效益却无相应增长 大数据收集已经得不偿失 应用效益
  • 【STM32】IAP

    首先先明白几个概念 IAP In applicating Programing 在应用编程 ICP In Circuit Programming 在线编程 我自己理解的话 ICP就是平时用仿真器直接下载程序的方式 应用程序直接从FLASH的
  • wireshark过滤规则

    wireshark是一款抓包软件 常用来分析网络底层协议 寻找网络安全问题 平时用的最多的是过滤功能 wireshark的过滤分功能有两种 抓包过滤器和显示过滤器 抓包过滤器的过滤规则分为四个部分 放行 类型 协议和逻辑运算符 方向 src
  • Jmeter性能测试面试基础问答

    性能测试基础 简述实施软件性能测试的流程 a 性能需求分析 挑选用户使用最频繁的功能来做测试 比如 登陆 搜索 提交订单 确定性能指标 比如 事务通过率为100 90 的事务响应时间不超过5秒 并发用户为1000人时CPU和内存的使用率在7
  • 自动化测试很难吗?是的,难。?

    其实现在软件测试有一个特别奇怪的现象 那就是每个人在一起进入这个圈子的时候 他想的就是我要自动化测试 我要学会自动化 自动化会替换手工测试 很多这种心声 我在这给大家来分析一下 首先为什么很多人在入这个圈的时候 会听到 这种声音 比如 学好
  • C语言例题讲解(if语句,循环语句,函数)

    目录 if语句例题 题目分析 代码 题目总结 循环语句例题 题目分析 代码 题目总结 函数例题 题目分析 代码 题目总结 if语句例题 计算1 1 1 2 1 3 1 4 1 5 1 99 1 100 的值 打印出结果 题目分析 1 首先我
  • LinkList集合详解

    LinkList集合详解 1 LinkedList简介 LinkedList类是一个继承于AbstractSequentialList的双向循环链表 它是非同步的 也是非线程安全的 LinkedList实现了List接口 能对它进行队列操作