【数据结构】你该在什么情况下使用 LindedList

什么是 Java 的 LinkedList?

LinkedList 是 Java 集合框架中的一个类,位于 java.util 包中。它实现了 List 接口,并且是一个双向链表结构,可以高效地进行插入和删除操作。

主要特点

双向链表:每个节点包含指向前一个节点和后一个节点的引用。

动态大小:链表的长度可以根据需要动态变化。

非同步LinkedList 不是线程安全的,如果多个线程同时访问一个 LinkedList 实例,需要手动进行同步处理。

构造方法

LinkedList 提供了两个主要构造方法:

  1. 默认构造方法

    LinkedList<E> list = new LinkedList<>();
    
  2. 带集合参数的构造方法

    LinkedList<E> list = new LinkedList<>(Collection<? extends E> c);
    

主要方法

  1. 添加元素

    • add(E e): 在列表末尾添加元素。
    • addFirst(E e): 在列表开头添加元素。
    • addLast(E e): 在列表末尾添加元素(等同于 add(E e))。
    • add(int index, E element): 在指定位置添加元素。
    list.add("element");
    list.addFirst("firstElement");
    list.addLast("lastElement");
    list.add(1, "secondElement");
    
  2. 获取元素

    • get(int index): 获取指定位置的元素。
    • getFirst(): 获取第一个元素。
    • getLast(): 获取最后一个元素。
    String firstElement = list.getFirst();
    String lastElement = list.getLast();
    String secondElement = list.get(1);
    
  3. 删除元素

    • remove(): 删除并返回第一个元素。
    • removeFirst(): 删除并返回第一个元素(等同于 remove())。
    • removeLast(): 删除并返回最后一个元素。
    • remove(int index): 删除并返回指定位置的元素。
    list.remove();
    list.removeFirst();
    list.removeLast();
    list.remove(1);
    
  4. 其他方法

    • size(): 返回链表的元素个数。
    • clear(): 清空链表。
    • contains(Object o): 判断链表是否包含指定元素。
    • isEmpty(): 判断链表是否为空。
    • toArray(): 将链表转换为数组。
    int size = list.size();
    list.clear();
    boolean containsElement = list.contains("element");
    boolean isEmpty = list.isEmpty();
    Object[] array = list.toArray();
    

优点

  • 动态大小,可以高效地进行插入和删除操作。
  • 实现了双向链表,可以双向遍历。

缺点

  • 由于节点存储了指向前后节点的引用,内存开销较大。
  • 不能随机访问,需要遍历来找到指定位置的元素,时间复杂度为 O(n)。

使用场景

  • 需要频繁插入和删除操作:例如实现队列和栈。
  • 需要动态调整大小:链表可以根据需要动态增加或减少大小。
  • 需要双向遍历:例如实现双向迭代器。

示例代码

下面是一个简单的示例,展示了如何使用 LinkedList

import java.util.LinkedList;public class LinkedListExample {public static void main(String[] args) {LinkedList<String> list = new LinkedList<>();// 添加元素list.add("Apple");list.add("Banana");list.addFirst("Orange");list.addLast("Grapes");// 获取元素System.out.println("First Element: " + list.getFirst());System.out.println("Last Element: " + list.getLast());// 删除元素list.removeFirst();list.removeLast();// 遍历链表for (String element : list) {System.out.println("Element: " + element);}}
}

LinkedList 是 Java 集合框架中一个强大的类,适用于需要频繁插入和删除操作的场景。虽然它的随机访问性能不如数组,但它在动态调整大小和双向遍历方面表现出色。理解并掌握 LinkedList 的使用,对提升 Java 编程能力非常有帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/51956.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用 Python实现自动发送电子邮件报告的脚本

要编写一个自动发送每日电子邮件报告的 Python 脚本&#xff0c;并进行设置&#xff0c;您可以按照以下步骤进行。我们将使用 smtplib 发送电子邮件&#xff0c;并使用 schedule 库安排每日任务。 首先&#xff0c;确保您安装了必要的库&#xff1a; pip install schedule然后…

米家护眼台灯怎么样?书客、米家、明基三款护眼台灯大PK

市面上出现的护眼台灯款式不得不说真的很多&#xff0c;大家若是想要在护眼台灯这个大市场里选购到一款性价比高、质量过关、口碑好且还真的实用的护眼台灯需要认真做好攻略。所以&#xff0c;我们要有技巧的对这些台灯进行筛选&#xff0c;避开那些三无的、网红品牌、无知名度…

http协议与nginx

动态页面与静态页面的差别&#xff1a; &#xff08;1&#xff09;URL不同 静态⻚⾯链接⾥没有“?” 动态⻚⾯链接⾥包含“&#xff1f;” &#xff08;2&#xff09;后缀不同 (开发语⾔不同) 静态⻚⾯⼀般以 .html .htm .xml 为后缀 动态⻚⾯⼀般以 .php .jsp .py等为后…

【吊打面试官系列-Dubbo面试题】Dubbo SPI 和 Java SPI 区别?

大家好&#xff0c;我是锋哥。今天分享关于 【Dubbo SPI 和 Java SPI 区别&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; Dubbo SPI 和 Java SPI 区别&#xff1f; JDK SPI JDK 标准的 SPI 会一次性加载所有的扩展实现&#xff0c;如果有的扩展吃实话很耗时&…

Python中的类型注解和静态类型检查使用详解

概要 Python作为一种动态类型语言,其灵活性和易用性使其广受欢迎。然而,动态类型也带来了一些问题,如代码可读性差和运行时错误等。为了提高代码质量和可维护性,Python从3.5版本开始引入了类型注解(Type Hints),并且借助第三方工具可以实现静态类型检查。本文将详细介绍…

Python学生信息管理系统

一、需求分析 学生管理系统应具备的功能 1、添加学生及成绩信息 2、将学生信息保存到文件中 3、修改和删除学生信息 4、查询学生信息 5、根据学生成绩进行排序 6、统计学生的总分 二、系统设计 2.1、学生信息管理系统的系统功能结构&#xff08;7大模块&#xff09; 1、录入…

vue里给img的src绑定数据失效

起因 在v-for遍历数据时想要通过给img的src单向绑定 图片路径时出现问题 解决过程 上网查说是webpack构建时识别不到&#xff0c;直接不单绑数据&#xff0c;写死试试看 解决方案 直接require导入图像文件模块

AI Agent调研--7种Agent框架对比!盘点国内一站式Agent搭建平台,一文说清差别!大家都在用Agent做什么?

代理&#xff08;Agent&#xff09;乃一种智能实体&#xff0c;具备自主环境感知与决策行动能力&#xff0c;旨在达成既定目标。作为个人或组织之数字化替身&#xff0c;AI代理执行特定任务与交易&#xff0c;其核心价值在于简化工作流程&#xff0c;削减繁复性&#xff0c;并有…

MSPM0G3507之电赛小车

一、前言 本文没什么技术分享&#xff0c;纯聊天。以下内容均为笔者的浅薄理解&#xff0c;有不对的地方还请多多包涵。 二、相关配置 主控单元&#xff1a;MSPM0G3507SPTR&#xff08;48角&#xff09; 编译环境&#xff1a;Keil5.33、5.39&#xff08;推荐&#xff09;都可 …

Redisson关键参数含义介绍

一、threads&#xff08;线程池数量&#xff09; 对应executor&#xff08;线程池&#xff09; 默认值: 当前处理核数量 * 2 这个线程池数量被所有RTopic对象监听器&#xff0c;RRemoteService调用者和RExecutorService任务共同共享。 二、nettyThreads &#xff08;Netty线…

记录一个k8s集群zookeeper部署过程

由于网管中心交维要求必须是支持高可用配置&#xff0c;原先单节点的zookeeper不被允许。所以在k8s集群中做了一个高可用版本的zookeeper。 期间有点小波折&#xff0c;官方给的镜像版本太老&#xff0c;业务不支持&#xff0c;所以手动做了下处理&#xff0c;重新打了一个镜像…

Springboot使用Dynamic-Datasource配置多数据源

使用方法 1.maven引入dynamic-datasource-spring-boot-starter依赖 如果spring-boot是1.5.x 或2.x.x版本&#xff0c;引入下面的依赖: <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifac…

数据结构与算法-关于堆的基本排序介绍

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言一、堆排序…

Springboot使用Redis实现分布式锁

1、使用场景和实现方案&#xff1a; 使用场景&#xff1a;本地锁如Lock和Syncronized只能锁住本地进程&#xff0c;在分布式应用中&#xff0c;需要使用分布式锁来更好实现特定的业务。 实现方案&#xff1a;有多种&#xff0c;比如使用mysql、zookeeper、redis&#xff0c;各…

80端口被system占用 ,system进程是4!!!亲测-----解决

最近需要使用nginx&#xff0c;发现80端口北占用 正常情况下&#xff0c;查看那个进程占用&#xff0c;然后找到对应的程序&#xff0c;关闭对应的就可了。 使用 netstat 命令&#xff1a; 打开命令提示符&#xff08;以管理员身份&#xff09;。输入命令 netstat -ano | fi…

vue中v-show和v-if指令的共同点和不同点

1、相同点&#xff1a; v-show 和v-if 都能控制元素的显示和隐藏。 2、不同点&#xff1a; 2.1) 实现本质方法不同 v-show本质就是通过设置css中的display设置为none&#xff0c; 控制隐藏 v-if 是动态的向DOM树内添加或者删除DOM元素 2.2) 编译的区别 v-show 其实就是在控…

vue3 + element plus使用iconfont 自定义font组件颜色大小可修改

vue3 element plus使用iconfont 自定义font组件&颜色大小可修改这里写自定义目录标题 自定义SvgIcon.vue引入iconfontApp.vue中引入组件更改图标大小 参考网上方案新建SvgIcon.vue&#xff0c;但没说明怎么修改颜色及大小&#xff0c;我在这个博客中简单提供下。 自定义Sv…

通用大模型演进路线

随着人工智能技术的飞速发展&#xff0c;通用大模型&#xff08;GLMs&#xff09;已经成为人工智能领域的重要研 究方向。通用大模型拥有超大规模参数&#xff0c;通过大规模数据进行训练&#xff0c;具备强大的学习和推理 能力。这些模型在自然语言处理、图像识别、代码生成等…

skynet 实操篇

文章目录 概述demo启动文件skynet_start配置文件main.luastart函数thread_workerskynet_context_message_dispatchskynet_mq_popdispatch_message 小结 概述 上一篇写完skynet入门篇&#xff0c;这一篇写点实操性质的。 demo 对于一个开源框架&#xff0c;大部分都有他们自己…

史上最全的Seata教学并且连接springcloudAlibaba进行使用

来都来了点个赞收藏一下在走呗~~&#x1f339;&#x1f339;玫瑰 一、Seata是什么 Seata&#xff08;Simple Extensible Autonomous Transaction Architecture&#xff0c;简单可扩展自治事务框架&#xff09;是一种分布式事务解决方案&#xff0c;旨在解决分布式系统中的事务…