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

Java学习教程,从入门到精通,Java LinkedList(链表)语法知识点及案例代码(62)

Java LinkedList(链表)语法知识点及案例代码

一、LinkedList概述

LinkedList是Java集合框架中的一个类,位于java.util包中。它实现了List、Deque、Queue等接口,提供了链表数据结构的实现。链表是一种线性数据结构,其中每个元素都是一个节点,节点包含数据和指向下一个节点的引用。LinkedList是一个双向链表,每个节点除了指向下一个节点外,还指向前一个节点。

二、LinkedList的特点
  • 动态大小:链表的大小是动态变化的,不需要预先分配固定大小的内存。
  • 高效的插入和删除操作:在链表中间进行插入和删除操作的时间复杂度为O(1)(在已知节点位置的情况下)。
  • 随机访问效率低:访问链表中任意位置的元素需要从头开始遍历,时间复杂度为O(n)。
三、LinkedList的常见方法
  1. 构造方法

    • LinkedList():创建一个空的LinkedList。
    • LinkedList(Collection<? extends E> c):使用指定的集合来创建LinkedList。
  2. 添加元素

    • void add(E e):在链表末尾添加元素。
    • void add(int index, E element):在链表的指定位置插入元素。
    • void addFirst(E e):在链表的开头添加元素。
    • void addLast(E e):在链表的末尾添加元素。
  3. 删除元素

    • E remove():删除并返回链表的第一个元素。
    • E remove(int index):删除链表中指定位置的元素。
    • boolean remove(Object o):删除链表中指定的元素(如果存在)。
    • E removeFirst():删除并返回链表的第一个元素。
    • E removeLast():删除并返回链表的最后一个元素。
  4. 访问元素

    • E get(int index):返回链表中指定位置的元素。
    • E getFirst():返回链表的第一个元素。
    • E getLast():返回链表的最后一个元素。
  5. 检查元素

    • boolean contains(Object o):检查链表中是否包含指定的元素。
  6. 查找元素位置

    • int indexOf(Object o):返回链表中第一次出现指定元素的索引位置。
    • int lastIndexOf(Object o):返回链表中最后一次出现指定元素的索引位置。
  7. 其他方法

    • int size():返回链表中元素的数量。
    • void clear():清空链表中的所有元素。
    • boolean isEmpty():检查链表是否为空。
    • Iterator<E> iterator():返回链表的迭代器。
    • ListIterator<E> listIterator():返回链表的列表迭代器。
    • ListIterator<E> listIterator(int index):返回从指定位置开始的列表迭代器。
四、案例代码

以下是一个简单的Java程序,展示了如何使用LinkedList及其常见方法。

import java.util.LinkedList;
import java.util.Iterator;
import java.util.ListIterator;public class LinkedListExample {public static void main(String[] args) {// 创建一个LinkedList对象LinkedList<String> linkedList = new LinkedList<>();// 添加元素到链表末尾linkedList.add("苹果");linkedList.add("香蕉");linkedList.add("橙子");// 在指定位置插入元素linkedList.add(1, "葡萄");// 访问元素String fruit = linkedList.get(2);System.out.println("索引为2的元素: " + fruit); // 输出: 索引为2的元素: 葡萄// 删除元素String removedFruit = linkedList.remove(0);System.out.println("移除的元素: " + removedFruit); // 输出: 移除的元素: 苹果// 获取链表的大小int size = linkedList.size();System.out.println("大小: " + size); // 输出: 大小: 3// 检查链表是否为空boolean empty = linkedList.isEmpty();System.out.println("是否为空: " + empty); // 输出: 是否为空: false// 检查链表是否包含指定元素boolean contains = linkedList.contains("香蕉");System.out.println("是否包含香蕉: " + contains); // 输出: 是否包含香蕉: true// 使用Iterator遍历Iterator<String> iterator = linkedList.iterator();while (iterator.hasNext()) {System.out.println(iterator.next());}// 使用ListIterator遍历和修改ListIterator<String> listIterator = linkedList.listIterator();while (listIterator.hasNext()) {String element = listIterator.next();if (element.equals("葡萄")) {listIterator.set("草莓"); // 修改元素}}// 输出修改后的链表System.out.println("修改后的链表: " + linkedList); // 输出: 修改后的链表: [香蕉, 草莓, 橙子]// 清空链表linkedList.clear();System.out.println("清空后的链表是否为空: " + linkedList.isEmpty()); // 输出: 清空后的链表是否为空: true}
}
五、总结

LinkedList是一个强大的数据结构,适用于在列表中间频繁进行插入和删除操作的场景。通过掌握其常见方法和特点,可以更加高效地处理链表相关的编程问题。

当然可以,以下是一些关于Java中LinkedList的具体案例,涵盖了LinkedList的构造、元素增删、查找、遍历等操作:

案例一:LinkedList的基本构造与元素增删

import java.util.LinkedList;public class LinkedListExample {public static void main(String[] args) {// 构造一个空的LinkedListLinkedList<Integer> list = new LinkedList<>();// 尾插法添加元素list.add(1);list.add(2);list.add(3);// 在指定位置插入元素list.add(1, 4); // 在索引1的位置插入4// 删除元素list.remove(2); // 删除索引为2的元素,即3list.removeFirst(); // 删除第一个元素,即1list.removeLast(); // 删除最后一个元素// 打印链表内容System.out.println(list); // 输出:[4]}
}

案例二:LinkedList的查找与修改

import java.util.LinkedList;public class LinkedListSearchAndModify {public static void main(String[] args) {// 构造一个LinkedList并添加元素LinkedList<String> list = new LinkedList<>();list.add("apple");list.add("banana");list.add("cherry");// 查找元素int index = list.indexOf("banana"); // 查找"banana"的索引位置if (index != -1) {System.out.println("banana的索引位置是:" + index);} else {System.out.println("未找到元素banana");}// 修改元素list.set(1, "blueberry"); // 将索引为1的元素修改为"blueberry"// 打印链表内容System.out.println(list); // 输出:[apple, blueberry, cherry]}
}

案例三:LinkedList的遍历

import java.util.LinkedList;
import java.util.Iterator;
import java.util.ListIterator;
public class LinkedListIteration {public static void main(String[] args) {// 构造一个LinkedList并添加元素LinkedList<String> list = new LinkedList<>();list.add("dog");list.add("cat");list.add("bird");// 使用普通for循环遍历for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}// 使用增强for循环遍历for (String element : list) {System.out.println(element);}// 使用Iterator遍历Iterator<String> iterator = list.iterator();while (iterator.hasNext()) {System.out.println(iterator.next());}// 使用ListIterator遍历,并演示反向遍历ListIterator<String> listIterator = list.listIterator();while (listIterator.hasNext()) {System.out.println(listIterator.next());}System.out.println("反向遍历:");while (listIterator.hasPrevious()) {System.out.println(listIterator.previous());}}
}

案例四:LinkedList作为队列使用

import java.util.LinkedList;public class LinkedListAsQueue {public static void main(String[] args) {// 构造一个空的LinkedList作为队列LinkedList<String> queue = new LinkedList<>();// 入队操作queue.addLast("task1");queue.addLast("task2");queue.addLast("task3");// 出队操作并打印System.out.println(queue.removeFirst()); // 输出:task1System.out.println(queue.pollFirst()); // 输出:task2,pollFirst在队列为空时返回null,避免异常// 打印剩余队列内容System.out.println(queue); // 输出:[task3]}
}

这些案例展示了LinkedList在Java中的基本用法,包括构造链表、添加和删除元素、查找和修改元素、遍历链表以及将链表作为队列使用等场景。通过这些案例,可以更好地理解和掌握LinkedList的使用。

相关文章:

Java学习教程,从入门到精通,Java LinkedList(链表)语法知识点及案例代码(62)

Java LinkedList&#xff08;链表&#xff09;语法知识点及案例代码 一、LinkedList概述 LinkedList是Java集合框架中的一个类&#xff0c;位于java.util包中。它实现了List、Deque、Queue等接口&#xff0c;提供了链表数据结构的实现。链表是一种线性数据结构&#xff0c;其…...

设计模式——Singleton(单例)设计模式

摘要 本文介绍了单例设计模式的概念、实现和应用场景。单例模式确保某个类只有一个实例&#xff0c;节省资源并提供全局访问点。文章详细解释了单例模式的实现要素&#xff0c;包括私有构造方法、静态实例和公共静态方法&#xff0c;并探讨了其在数据库连接池、日志记录器和配…...

深入理解 CSS 文本换行: overflow-wrap 和 word-break

前言 正常情况下&#xff0c;在固定宽度的盒子中的中文会自动换行。但是&#xff0c;当遇到非常长的英文单词或者很长的 URL 时&#xff0c;文本可能就不会自动换行&#xff0c;而会溢出所在容器。幸运的是&#xff0c;CSS 为我们提供了一些和文本换行相关的属性&#xff1b;今…...

Java-27 深入浅出 Spring - 实现简易Ioc-03 在上节的业务下手动实现IoC

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 大数据篇正在更新&#xff01;https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了&#xff1a; MyBatis&#xff…...

kubernetes学习-使用metrics-server监控集群资源和查看日志

kubernetes学习-使用metrics-server监控集群资源和查看日志 一 、简介二、应用场景三、部署四、查看日志 一 、简介 Metrics Server 是一个用于 Kubernetes 集群的监控工具&#xff0c;它用于收集、存储和提供关于集群中各种资源的度量数据。Metrics Server 是 Kubernetes 中一…...

解决 Git Permission denied 问题

前言 push项目时出现gitgithub.com: Permission denied (publickey). fatal: Could not read from remote repository.Please make sure you have the correct access rights and the repository exists.出现这个问题表示你在尝试将本地代码推送到GitHub时&#xff0c;没有提供…...

CCNP_SEC_ASA 第三天作业

实验需求&#xff1a; ASA 使用列表放行 Outside 路由器到 DMZ 路由器的 WWW 流量并拒绝 Telnet 流量&#xff0c;当放行和拒绝流量匹配后产生日志通告。 提示&#xff1a;需要使能 ASA的日志功能和 DMZ路由器的 HTTP功能。 设备配置&#xff1a; ##此处展示各设备的配置&am…...

TypeError: Cannot read properties of null (reading ‘ce‘)

vue项目本地跑不起来&#xff0c;但是build之后能运行&#xff0c;本地报错 是因为你的vue版本不对&#xff0c;你的package可能是这样写的 这个表示你允许你的npm安装vue3的任意版本&#xff0c;但是build是按照这个版本来的&#xff0c;所以build之后能运行&#xff0c;本地运…...

AdminJS - 集成 MySQL 的现代化管理面板开发指南

AdminJS - 集成 MySQL 的现代化管理面板开发指南 MySQL 集成配置 首先需要安装必要的依赖&#xff1a; npm install adminjs adminjs/express express npm install adminjs/sequelize sequelize mysql2基础配置示例 const AdminJS require(adminjs) const AdminJSExpress …...

上传文件(vue3)

使用el-upload 先上传到文件服务器&#xff0c;生成url 然后点击确定按钮&#xff1a; 保存数据 <template><el-dialog top"48px" width"500" title"新增协议" :modelValue"visible" close"handleClose()">…...

【Win10 环境vscode配置boost】

文章目录 Boost exe版本windows环境安装vscode配置安装测试总结 Boost exe版本windows环境安装 这里不介绍boost源码安装&#xff0c;请自行网络搜索。本文要介绍的是window下单c文件&#xff08;cpp&#xff09;&#xff0c;调用boost库的执行配置。不涉及多文件。 安装文件下…...

中间件 redis安装

redis官网地址&#xff1a;Redis - The Real-time Data Platform 环境 CentOS Linux release 7.9.2009 (Core) java version "17.0.12" 2024-07-16 LTS 1、通过压缩包安装redis 1&#xff0c;远程下载redis压缩包&#xff0c;或去官网下载&#xff1a;Downloads …...

[java] 简单的熔断器scala语言案例

failureRateInterval时间内如果addEx(错误)达到 maxFailuresPerInterval 次数&#xff0c;则fused方法返回true,表示触发熔断&#xff0c;进入冷却期coolingInterval&#xff0c;冷却期内fused方法返回true&#xff0c;冷却期过后进入下一个错误统计周期。 scala语言完成 imp…...

【java】序列化的种类和使用场景

文章目录 序列化概述什么是序列化&#xff1f;序列化的作用 Java内置序列化java.io.Serializable接口使用ObjectOutputStream和ObjectInputStream优缺点分析 自定义序列化实现Externalizable接口自定义序列化方法适用场景 第三方序列化框架KryoProtobuf (Google Protocol Buffe…...

Qt5与Qt6中的高DPI缩放属性解析

在Qt5中&#xff0c;高DPI缩放默认是禁用的。为了启用它&#xff0c;开发者需要设置Qt::AA_EnableHighDpiScaling应用程序属性。然而&#xff0c;在Qt6中&#xff0c;高DPI缩放默认是启用的&#xff0c;并且不能被禁用。这种变化使得开发者在处理高分辨率屏幕时更加方便&#x…...

Mac使用总结

Mac 常用快捷键 复制&#xff1a;Cmdc粘贴&#xff1a;Cmdv只粘贴文档&#xff1a; ShiftCmdv行首&#xff1a; Cmd<行尾&#xff1a;Cmd>鼠标处选中到行首&#xff1a;ShiftCmd<鼠标处选中到行尾&#xff1a;ShiftCmd>选中整行&#xff1a;上面两个命令组合鼠标处…...

【日期规则】EXCEl 自定义日期匹配规则,学习基础知识,自由匹配场景

excel 新建规则工具路径&#xff1a;开始 - 条件格式 - 新建规则 B$1TODAY() 注意&#xff1a;新建规则后&#xff0c;要点击 条件格式 - 管理规则 - 应用于 要选择规则应用范围 使用场景&#xff1a; excel 做进度管理当中可以查看当天的情况&#xff1b;每周的学习规划 或…...

苹果电脑可以安装windows操作系统吗?Mac OS X/OS X/macOS傻傻分不清?macOS系统的Java支持?什么是macOS的五大API法王?

苹果电脑可以安装windows操作系统吗? 先抛开虚拟机安装&#xff0c;苹果电脑可以安装Windows操作系统。苹果公司提供了一个名为Boot Camp的软件&#xff0c;它允许用户在Mac电脑上安装Windows操作系统。通过Boot Camp&#xff0c;用户可以在启动电脑时选择是要进入macOS还是Wi…...

芋道SpringBoot配置Maven、创建SpringBoot项目、创建Web接口、读取配置信息

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 系列文章目录 第一章 芋…...

物理机内网穿透

前言&#xff1a; 本文主要讲述如何使用内网穿透以及其安全性。 将带领大家在公网上搭建几个常用靶场。 一&#xff0c;什么是内网穿透。 大多数情况下&#xff0c;我们的个人电脑都处于内网&#xff0c;即没有可公开访问的独立 IP 地址&#xff0c;因此其他内网用户找不到…...

Vue 3: 通过图片链接获取图片颜色,间接设置背景颜色

在现代Web开发中&#xff0c;动态获取和处理图像数据是一个常见的需求。例如&#xff0c;你可能希望自动提取一张图片的主色调&#xff0c;以便根据这些颜色进行UI主题调整或其他视觉效果的处理。本文将介绍如何在Vue 3项目中&#xff0c;通过一个图片链接获取图片的颜色信息。…...

opencv-python的简单练习

题目1.读取一张彩色图像并将其转换为灰度图。 import cv2 # 读取图片文件 img cv2.imread(./1.png)# 将原图灰度化 img_gray cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)# 输出图片 cv2.imshow(img,img) cv2.imshow(img_g,img_gray) # 进行阻塞 cv2.waitKey(0) 题目2&#xff1a;…...

如何使用生成式AI实现跨领域内容生成

文章目录 引言生成式AI的基本概念定义与分类技术发展现状 跨领域内容生成的技术实现数据准备模型选择与设计训练策略 应用案例分析教育培训新闻媒体文化创意产业 实践建议确定明确的目标构建合适的团队持续迭代改进遵守法律法规 结论 引言 在当今数字化时代&#xff0c;信息的…...

【Linux】socket编程1

socket编程1 1. 网络字节序2. ip地址转换函数3. sockaddr数据结构 1. 网络字节序 多字节数据有大端和小端之分&#xff0c;网络数据流采用大端字节序&#xff0c;如果主机采用的是小端字节序&#xff0c;那么需要转换。 大端&#xff1a;低地址存高字节&#xff0c;高地址存低…...

Linux文件属性 --- 七种文件类型---文件.目录、软硬链接、字符设备文件

目录 七种文件类型 1、普通文件和目录 2、链接文件 2.1硬链接 2.2软链接 3、字符设备文件 一、七种文件类型 Linux的文件属性中一共有以下七种类型 &#xff1a; 符号类型含义解释-普通文件纯文本文件&#xff08;ASCII&#xff09;和二进制文件&#xff08;binary&#xff…...

Tree-of-Counterfactual Prompting for Zero-Shot Stance Detection

论文地址&#xff1a;Tree-of-Counterfactual Prompting for Zero-Shot Stance Detection - ACL Anthologyhttps://aclanthology.org/2024.acl-long.49/ 1. 概述 立场检测被定义为对文本中立场态度的自动推断。根据 Biber 和 Finegan (1988) 的定义&#xff0c;立场包含两个主…...

NextJs 路由管理

NextJs 路由管理 Defining Routes 1. Creating Routes 2. Creating UI export default function Page() {return <h1>Hello, Next.js!</h1> }Route Groups 路由组 1. 在不影响 URL 路径的情况下组织路由 要在不影响 URL 的情况下组织路由&#xff0c;请创建一…...

hive 小文件分析

1、获取fsimage文件&#xff1a; hdfs dfsadmin -fetchImage /data/xy/ 2、从二进制文件解析&#xff1a; hdfs oiv -i /data/xy/fsimage_0000000019891608958 -t /data/xy/tmpdir -o /data/xy/out -p Delimited -delimiter “,” 3、创建hive表 create database if not exists…...

【JavaWeb后端学习笔记】WebSocket通信

WebSocket是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手&#xff0c;两者之间就可以创建持久性的连接&#xff0c;并进行双向数据传输。 主要应用场景&#xff1a;视频弹幕、网页聊天、体育实况更新、股票基金报价实时…...

搭建springmvc项目

什么是springmvc MVC它是一种设计理念。把程序按照指定的结构来划分: Model模型 View视图 Controller控制层 springmvc框架是spring框架的一个分支。它是按照mvc架构思想设计的一款框架。 springmvc的主要作用: 接收浏览器的请求数据&#xff0c;对数据进行处理&#xff0c;…...