当前位置: 首页 > news >正文

【Java集合】LinkedList

概要

        LinkedList是用链表结构存储数据的,很适合数据的动态插入和删除,随机访问速度比较慢。另外,他还提供了 List 接口中没有定义的方法,专门用于操作表头和表尾元素,可以当作堆栈、队列和双向队列使用。

链表

        链表是线性表的常见实现。它由一系列节点(Node)组成,Node是LinkedList的一个内部类,有三个属性:item存储数据,next指向下一个节点的指针,prev指向上一个节点的指针,所以LinkedList是由双向链表实现的。

private static class Node<E> {E item;LinkedList.Node<E> next;LinkedList.Node<E> prev;
}

基本操作

LinkedList提供了一系列基本操作,包括添加元素、删除元素、查找元素、获取元素等。如:

add(E e)

在链表末尾添加一个元素

addFirst(E e)

在链表开头添加一个元素

addLast(E e)

在链表末尾添加一个元素

remove()

删除链表的第一个元素

remove(Object o)

删除链表中指定的元素

removeFirst()

删除链表的第一个元素

removeLast()

删除链表的最后一个元素

作为栈使用

        LinkedList可以作为栈使用,内部提供了push()和pop()方法用于入栈和出栈,还有peek()方法用于探测栈顶元素,不过作为LinkedList的副业,用户需自己遵守栈的规则,而不像Stack那样具有强制性。那为什么不直接使用Stack呢?理由是如果你已经有一个LinkedList了,为什么要费力把它转成Stack呢,另外,Stack是一个遗留类,它继承自Vector,是线程安全的,但是性能较低,已不推荐在新代码中使用。

作为队列使用

        LinkedList可以作为队列使用,内部提供了offer()和poll()方法用于入队和出队,与作为栈使用的理由一样,也是方便开发者使用,若需要创建一个队列,应该使用ArrayDeque。

注意事项

  • LinkedList可以在任意位置高效地添加、删除元素,不需要移动其他元素,不用考虑扩容问题。缺点是查找元素时需要遍历,效率较低。
  • 不要因为节省空间而选择LinkedList,ArrayList虽然数组后面可能会存在空间浪费的情况,但是组成LinkedList的每个节点也有两个指针的额外开销,所以不见的就比ArrayList更节省空间,应该根据需求选择合适的数据结构。
  • LinkedList不是线程同步的,多线程共用需做好同步。
http://www.lryc.cn/news/445144.html

相关文章:

  • 大模型之基准测试集(Benchmark)-给通义千问2.0做测评的10个权威测基准测评集
  • 解决selenium爬虫被浏览器检测问题
  • 计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-17
  • LLM - 理解 多模态大语言模型(MLLM) 的 幻觉(Hallucination) 与相关技术 (七)
  • 如何在C++中实现RDP协议的屏幕更新功能?
  • Tornado 是一个 Python 异步网络库和 web 框架
  • 鹏哥C语言49---第5次作业:选择语句 if 和 switch
  • 通过 Flink 的火焰图定位反压
  • 初识爬虫8
  • Unity SRP 可编程渲染管线的基本用法
  • AutoX.js向后端传输二进制数据
  • lvgl学习笔记--基础对象1
  • TDengine 在业务落地与架构改造中的应用实践!
  • Python3爬虫教程-HTTP基本原理
  • 竹云赋能“中国·贵州”全省统一移动应用平台建设,打造政务服务“新引擎”
  • 【MySQL 04】数据类型
  • 夹耳式蓝牙耳机哪个牌子最好,教你如何不踩雷
  • 亿发零售云解析:新零售破局与年轻群体消费趋势变化
  • zabbix“专家坐诊”第257期问答
  • 【代码笔记】
  • CentOS上使用Mosquitto实现Mqtt主题消息发布和订阅mqtt主题消息连同时间戳记录到文件
  • COMTRADE 录波文件 | 可视化工具 | 电能质量查看软件
  • 【面试宝典】面试基础指导
  • Linux·权限与工具-git与gdb
  • unity 如何 团队协作避免文件冲突?
  • VOC2007 的ImageSets/Main目录下通常有四个文件test.txt val.txt train.txt trainval.txt
  • JavaScript中的parseInt(), Number(),+有啥区别?
  • java核心基础
  • java 字符串如何通过占位符替换字符串
  • OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【LMS调测】