当前位置: 首页 > 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不是线程同步的,多线程共用需做好同步。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • vue一级、二级路由设计
  • 多态的使用和原理(c++详解)
  • 【第十二周】李宏毅机器学习笔记10:生成式对抗网络2
  • Mysql梳理9——多表查询连接分类及实现内、外连接
  • 探讨基于AI技术的相亲交友系统设计与实现
  • 得物App荣获新奖项,科技创新助力高质量发展
  • ArcGIS10.2/10.6安装包下载与安装(附详细安装步骤)
  • 深度学习——pytorch来实现延迟初始化
  • C++——给出年、月、日,计算该日是该年的第几天。(提示:要判断是否为闰年)
  • camtasia2024绿色免费安装包win+mac下载含2024最新激活密钥
  • C:内存函数
  • JVM-类加载器的双亲委派模型详解
  • 在C#中使用NPOI将表格中的数据导入excel中
  • 信息安全数学基础(15)欧拉定理
  • 第二十九章 添加数字签名 - 指定 KeyInfo 的规范化方法
  • Android 架构优化~MVP 架构改造
  • Django 博客开发教程 8 - 博客文章详情页
  • express + mock 让前后台并行开发
  • JavaScript设计模式之工厂模式
  • Linux Process Manage
  • React的组件模式
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • spring-boot List转Page
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 基于axios的vue插件,让http请求更简单
  • 区块链共识机制优缺点对比都是什么
  • 使用agvtool更改app version/build
  • 收藏好这篇,别再只说“数据劫持”了
  • 数据仓库的几种建模方法
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 我的面试准备过程--容器(更新中)
  • 小程序测试方案初探
  • 移动端解决方案学习记录
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 阿里云ACE认证学习知识点梳理
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • !$boo在php中什么意思,php前戏
  • # dbt source dbt source freshness命令详解
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (2)leetcode 234.回文链表 141.环形链表
  • (a /b)*c的值
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (C语言)逆序输出字符串
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (十五)使用Nexus创建Maven私服
  • (图)IntelliTrace Tools 跟踪云端程序
  • .NET WPF 抖动动画
  • .NET序列化 serializable,反序列化
  • .NET中 MVC 工厂模式浅析
  • /proc/vmstat 详解
  • @selector(..)警告提示
  • [20161101]rman备份与数据文件变化7.txt
  • [20190416]完善shared latch测试脚本2.txt
  • [bzoj1006]: [HNOI2008]神奇的国度(最大势算法)