Java集合 LinkedList

news2024/11/25 0:40:33

目录

  • LinkedList
  • 实例

LinkedList

LinkedList是Java中的一个重要的数据结构,它实现了List接口,提供了链表数据结构的实现。LinkedList类中包含了各种常用的链表操作,如添加、删除、查找等。

LinkedList的特点是元素可以动态地添加到链表的任意位置,并且链表中的元素可以按照它们被添加的顺序来遍历。由于LinkedList是基于链表实现的,因此它具有以下特点:

  1. 插入和删除操作可以在任何位置进行,时间复杂度为O(1)。
  2. 访问元素的操作可以在任何位置进行,时间复杂度为O(n)。
  3. 链表中的元素在内存中不是连续存储的,因此无法通过下标直接访问元素。

下面是一个简单的示例,演示如何使用LinkedList类:

import java.util.LinkedList;

public class LinkedListExample {
    public static void main(String[] args) {
        // 创建一个新的LinkedList对象
        LinkedList<String> linkedList = new LinkedList<>();

        // 添加元素到链表末尾
        linkedList.add("Element 1");
        linkedList.add("Element 2");
        linkedList.add("Element 3");

        // 在指定位置插入元素
        linkedList.add(1, "Element 4");

        // 遍历链表并打印元素
        for (String element : linkedList) {
            System.out.println(element);
        }

        // 删除指定位置的元素
        linkedList.remove(1);

        // 遍历链表并打印元素
        for (String element : linkedList) {
            System.out.println(element);
        }
    }
}

输出:

Element 1
Element 4
Element 2
Element 3

实例

假设我们有一个学生名单,每个学生有一个名字和学号。我们想要创建一个可以添加、删除和查找学生的链表。

  1. 首先,我们需要创建一个Student类,表示每个学生:
public class Student {  
    private String name;  
    private int studentId;  
  
    public Student(String name, int studentId) {  
        this.name = name;  
        this.studentId = studentId;  
    }  
  
    public String getName() {  
        return name;  
    }  
  
    public int getStudentId() {  
        return studentId;  
    }  
}
  1. 接下来,我们可以创建一个LinkedList的实例,并添加一些学生:
import java.util.LinkedList;  
  
public class Main {  
    public static void main(String[] args) {  
        // 创建一个新的LinkedList对象  
        LinkedList<Student> studentList = new LinkedList<>();  
  
        // 添加学生到链表末尾  
        studentList.add(new Student("Alice", 1));  
        studentList.add(new Student("Bob", 2));  
        studentList.add(new Student("Charlie", 3));  
        studentList.add(new Student("David", 4));  
  
        // 遍历链表并打印学生信息  
        for (Student student : studentList) {  
            System.out.println("Name: " + student.getName() + ", Student ID: " + student.getStudentId());  
        }  
    }  
}
  • 输出:
    在这里插入图片描述
  1. 现在,如果我们想在链表的特定位置插入一个新学生,我们可以使用add方法:
// 在指定位置插入新学生(位置为2)  
studentList.add(2, new Student("Eve", 5));

在这里插入图片描述

  1. 在Java的LinkedList类中,没有直接提供删除指定索引的学生的方法。但是,您可以通过以下步骤实现该功能:

    使用indexOf方法找到要删除学生的索引。
    使用remove方法删除该索引处的元素。

        // 要删除的学号  

        int studentIdToRemove = 3;  

        // 查找要删除学生的索引  

        int index = -1;  

        for (int i = 0; i < studentList.size(); i++) {  

            Student student = studentList.get(i);  

            if (student.getStudentId() == studentIdToRemove) {  

                index = i;  

                break;  

            }  

        }  
        // 检查是否找到了要删除的学生  

        if (index != -1) {  

            // 删除该索引处的元素(学生)  

            studentList.remove(index);  

            System.out.println("学生 " + studentIdToRemove + " 已被删除。");  

        } else {  

            System.out.println("未找到学生 " + studentIdToRemove + "。");  

        } 

在这里插入图片描述

  1. 根据学号查找学生,你可以使用Java中的 LinkedList 类的 indexOf 方法来找到具有特定学号的学生。
// 要查询的学号  
        int studentIdToFind = 5;  
  
        // 查找具有指定学号的学生并输出其名字  
        Student foundStudent = null;  
        for (Student student : studentList) {  
            if (student.getStudentId() == studentIdToFind) {  
                foundStudent = student;  
                break;  
            }  
        }  
        if (foundStudent != null) {  
            System.out.println("找到了学生: " + foundStudent.getName() + ", 学号: " + foundStudent.getStudentId());  
        } else {  
            System.out.println("未找到学生 " + studentIdToFind + "。");  
        }  

在这里插入图片描述

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

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

相关文章

【转载】原生社区交友婚恋视频即时通讯双端APP源码 ONE兔2.0版

原生社区交友婚恋视频即时通讯双端APP源码下载ONE兔2.0版 包含后端、H5源码源码&#xff0c;Android源码&#xff0c;IOS源码

恒创科技:怎么看云主机的性价比

随着云计算技术的不断发展&#xff0c;云主机已经成为越来越多企业和个人用户的首选计算资源。然而&#xff0c;在选择云主机时&#xff0c;性价比是一个非常重要的考虑因素。那么&#xff0c;怎么看云主机的性价比呢&#xff1f; 通常来说&#xff0c;云主机的成本主要包括硬…

【调试】pstore原理和使用方法总结

什么是pstore pstore最初是用于系统发生oops或panic时&#xff0c;自动保存内核log buffer中的日志。不过在当前内核版本中&#xff0c;其已经支持了更多的功能&#xff0c;如保存console日志、ftrace消息和用户空间日志。同时&#xff0c;它还支持将这些消息保存在不同的存储…

模拟发送 Ctrl+Alt+Del 快捷键

目录 前言 一、在 XP 系统上模拟 SAS 二、在不低于 Vista 的系统上模拟 SAS 2.1 一些细节 2.2 实现原理和应用 三、完整实现代码和测试 3.1 客户端控制台程序 3.2 服务程序 3.3 编译&测试程序 四、总结&更新 参考文献 前言 对于开启了安全登陆的窗口工作站…

FFmpeg中的Color颜色参数解析、转码和HDR

前言 视频中帧的颜色信息非常重要&#xff0c;表示着编码时用到的标准&#xff0c;意味着解码时也要对应上&#xff0c;或者要使用正确的转换函数&#xff0c;否则就会带来色差问题。 关于FFmpeg中的颜色参数&#xff0c;有下边几个重要的结构体&#xff1a; 颜色参数相关的结…

基于SSM的图书馆预约占座系统(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的图书馆预约占座系统&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring…

seatunnel数据集成(四)转换器使用

seatunnel数据集成&#xff08;一&#xff09;简介与安装seatunnel数据集成&#xff08;二&#xff09;数据同步seatunnel数据集成&#xff08;三&#xff09;多表同步seatunnel数据集成&#xff08;四&#xff09;连接器使用 seatunnel除了丰富的连接器类型&#xff0c;其转换…

【大厂AI课学习笔记】【1.6 人工智能基础知识】(3)神经网络

深度学习是机器学习中一种基于对数据进行表征学习的算法。观测值(例如一幅草莓照片)可以使用 多种方式来表示&#xff0c;如每个像素强度值的向量&#xff0c;或者更抽象地表示成一系列边、特定形状的区域等。 深度学习的最主要特征是使用神经网络作为计算模型。神经网络模型 …

python+flask+django医院预约挂号病历分时段管理系统snsj0

技术栈 后端&#xff1a;python 前端&#xff1a;vue.jselementui 框架&#xff1a;django/flask Python版本&#xff1a;python3.7 数据库&#xff1a;mysql5.7 数据库工具&#xff1a;Navicat 开发软件&#xff1a;PyCharm . 第一&#xff0c;研究分析python技术&#xff0c…

《UE5_C++多人TPS完整教程》学习笔记8 ——《P9 访问 Steam(Acessing Steam)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P9 访问 Steam&#xff08;Acessing Steam&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&#xff0c;UP主&#xff08;也是译者&…

使用UMAP降维可视化RAG嵌入

大型语言模型&#xff08;LLMs&#xff09;如 GPT-4 已经展示了出色的文本理解和生成能力。但它们在处理领域特定信息方面面临挑战&#xff0c;比如当查询超出训练数据范围时&#xff0c;它们会产生错误的答案。LLMs 的推理过程也缺乏透明度&#xff0c;使用户难以理解达成结论…

Win10截图的四种方式

截图不一定要依靠通讯软件&#xff0c;现在系统自己就带有这些功能。 1.Win Shift S组合键&#xff1a;选择微信截图&#xff0c;部分截图&#xff0c;随心所欲&#xff1b; 2.Win W组合键&#xff1a;呼出屏幕右侧的工作区&#xff0c;选择屏幕草图&#xff0c;支持裁剪、编辑…

flask+python高校学生综合测评管理系统 phl8b

系统包括管理员、教师和学生三个角色&#xff1b; 。通过研究&#xff0c;以MySQL为后端数据库&#xff0c;以python为前端技术&#xff0c;以pycharm为开发平台&#xff0c;采用vue架构&#xff0c;建立一个提供个人中心、学生管理、教师管理、课程类型管理、课程信息管理、学…

网络安全工程师技能手册(附学习路线图)

关键词&#xff1a;网络安全入门、渗透测试学习、零基础学安全、网络安全学习路线 安全是互联网公司的生命&#xff0c;也是每位网民的基本需求。现在越来越多的人对网络安全感兴趣&#xff0c;愿意投奔到网络安全事业之中&#xff0c;这是一个很好的现象。 很多对网络安全感…

线程池7个参数描述

所谓的线程池的 7 大参数是指&#xff0c;在使用 ThreadPoolExecutor 创建线程池时所设置的 7 个参数&#xff0c;如以下源码所示&#xff1a; public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable&…

游泳时可以听歌的耳机有哪些?戴游泳耳机有哪些好处?

游泳和跑步在某种程度上相似&#xff0c;特别是在短距离冲刺时&#xff0c;大脑似乎变得空白&#xff0c;而在中长距离的有氧运动中&#xff0c;身体感到疲劳&#xff0c;但大脑却异常清晰&#xff0c;时间却显得格外漫长。如何打发时间&#xff0c;让游泳锻炼变得不无聊&#…

「深度学习」dropout 技术

一、工作原理 1. 正则化网络 dropout 将遍历网络的每一层&#xff0c;并设置消除神经网络中节点的概率。 1. 每个节点保留/消除的概率为0.5: 2. 消除节点&#xff1a; 3. 得到一个规模更小的神经网络&#xff1a; 2. dropout 技术 最常用&#xff1a;反向随机失活 "…

Ubuntu Desktop - Terminal 输出全部选中 + 复制

Ubuntu Desktop - Terminal 输出全部选中 复制 1. Terminal2. Terminal 最大化3. Edit -> Select All4. Copy & PasteReferences 1. Terminal 2. Terminal 最大化 3. Edit -> Select All 4. Copy & Paste Edit -> Copy or Shift Ctrl C Edit -> Paste…

线程-线程的创建方式与线程池基础知识

创建线程有四种方式&#xff0c;继承Thread类、实现Runnable接口、实现Callable接口、线程池创建线程&#xff0c;常用的还是线程池创建线程。 1.继承Thread类 自定义类MyThread&#xff08;叫什么都行&#xff09;去extends Thread 重写里面的run方法&#xff0c;new MyThr…

2024-02-12 Unity 编辑器开发之编辑器拓展3 —— EditorGUI

文章目录 1 GUILayout2 EditorGUI 介绍3 文本、层级、标签、颜色拾取3.1 LabelField3.2 LayerField3.3 TagField3.4 ColorField3.5 代码示例 4 枚举选择、整数选择、按下按钮4.1 EnumPopup / EnumFlagsField4.2 IntPopup4.3 DropdownButton4.4 代码示例 5 对象关联、各类型输入…