【Java集合】LinkedList

news/2024/9/20 18:00:45 标签: java

概要

        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.niftyadmin.cn/n/5667453.html

相关文章

再次理解UDP协议

一、再谈端口号 在 TCP / IP 协议中&#xff0c;用 "源 IP", "源端口号", "目的 IP", "目的端口号", "协议号" 这样一个五元组来标识一个通信(可以通过 netstat -n 查看) 我们需要端口号到进程的唯一性&#xff0c;所以一个…

芯片级配件产品研发的小众企业生存之路

在半导体行业中&#xff0c;芯片级配件产品的研发一直是一个充满挑战的领域&#xff0c;尤其是对于小众企业而言&#xff0c;如何在技术壁垒高、资金需求大的市场中生存并发展&#xff0c;成为了业界普遍关注的问题。芯片级配件产品涉及到晶圆制造、封装、测试等多个复杂工艺环…

【Verilog学习日常】—牛客网刷题—Verilog快速入门—VL22

根据状态转移图实现时序电路 描述 某同步时序电路的状态转换图如下&#xff0c;→上表示“C/Y”&#xff0c;圆圈内为现态&#xff0c;→指向次态。 请使用D触发器和必要的逻辑门实现此同步时序电路&#xff0c;用Verilog语言描述。 电路的接口如下图所示&#xff0c;C是单b…

neo4j节点关联路径的表示、节点的增删改查

目录 核心概念节点的增删改查&#xff08;1&#xff09;增&#xff08;2&#xff09;查&#xff08;3&#xff09;删&#xff08;4&#xff09;改 neo4j文档&#xff1a;https://neo4j.com/docs/ https://neo4j.com/docs/cypher-manual/current/introduction/ 核心概念 节点 ne…

高等数学 3.5 函数的极值与最大值最小值

文章目录 一、函数的极值及其求法二、最大值最小值问题 一、函数的极值及其求法 定义 设函数 f ( x ) f(x) f(x) 在点 x 0 x_0 x0​ 的某邻域 U ( x 0 ) U(x_0) U(x0​) 内有定义&#xff0c;如果对于去心邻域 U ˚ ( x 0 ) \mathring{U}(x_0) U˚(x0​) 内的任一 x x x &…

初始c++:入门基础(完结)

打字不易&#xff0c;留个赞再走吧~~~ 目录 一函数重载二引用1 引⽤的概念和定义2引⽤的特性3引⽤的使⽤三inline四nullptr 一函数重载 C⽀持在同⼀作⽤域中出现同名函数&#xff0c;但是要求这些同名函数的形参不同&#xff0c;可以是参数个数不同或者 类型不同。这样C函数调⽤…

Prompt最佳实践|指定输出的长度

在OpenAI的官方文档中已经提供了[Prompt Enginerring]的最佳实践&#xff0c;目的就是帮助用户更好的使用ChatGPT 编写优秀的提示词我一共总结了9个分类&#xff0c;本文讲解第6个分类&#xff1a;指定输出长度 提供更多的细节要求模型扮演角色使用分隔符指定任务步骤提供样例…

什么品牌超声波清洗机质量好?四大绝佳超声波清洗机品牌推荐!

在快节奏的现代生活中&#xff0c;个人物品的清洁卫生显得至关重要。眼镜、珠宝饰品、手表乃至日常餐厨用具&#xff0c;这些频繁接触的物品极易累积污渍与细菌。拿眼镜为例&#xff0c;缺乏定期清洁会让油渍与尘埃积累&#xff0c;进而成为细菌的温床&#xff0c;靠近眼睛使用…