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

Java LinkedList(单列集合)

LinkedList 是 Java 中实现了 List 接口的一个类,它属于 java.util 包。与 ArrayList 不同,LinkedList 是基于双向链表实现的,适合于频繁进行插入和删除操作的场景。

1. LinkedList 的基本特性

  • 基于链表实现:LinkedList 使用双向链表来存储元素,每个节点包含数据部分和指向前后节点的引用。这样,插入和删除操作的效率较高,尤其是在中间或头部进行操作时。
  • 支持所有 List 操作:由于 LinkedList 实现了 List 接口,它支持 List 接口中的所有方法,如添加、删除、访问、查询等。
  • 支持 Deque 操作:LinkedList 还实现了 Deque 接口,允许它作为双端队列使用,支持在队列的两端进行插入和删除操作。

2. LinkedList 的构造方法

2.1 默认构造方法:

创建一个空的 LinkedList。

LinkedList<String> list = new LinkedList<>();

2.2 从其他集合创建:

可以通过一个 Collection(如 List、Set)来创建一个新的 LinkedList。

LinkedList<String> list = new LinkedList<>(anotherList);

3. LinkedList 的常用方法

LinkedList 继承了 List 接口,因此它具有与 ArrayList 类似的基本操作方法。除此之外,它还提供了 Deque 接口的方法。

3.1 添加元素

  • add(E e):将元素添加到列表的末尾。
java
LinkedList<String> list = new LinkedList<>();
list.add("Apple");
list.add("Banana");
  • addFirst(E e):将元素添加到链表的头部。
list.addFirst("Orange");  // 在头部插入 "Orange"
  • addLast(E e):将元素添加到链表的尾部。
list.addLast("Grapes");  // 在尾部插入 "Grapes"

3.2 访问元素

  • get(int index):返回指定位置的元素。
 - String fruit = list.get(0);  // 获取索引 0 位置的元素,返回 "Apple"
  • getFirst():返回链表的第一个元素。
String firstFruit = list.getFirst();  // 返回 "Apple"
  • getLast():返回链表的最后一个元素。
String lastFruit = list.getLast();  // 返回 "Grapes"

3.3 删除元素

  • remove(int index):删除指定位置的元素。
list.remove(1);  // 删除索引 1 位置的元素
  • removeFirst():删除链表的第一个元素。
list.removeFirst();  // 删除头部的元素("Apple")
  • removeLast():删除链表的最后一个元素。
list.removeLast();  // 删除尾部的元素("Grapes")
  • remove(Object o):删除指定元素,删除首次出现的元素。
list.remove("Banana");  // 删除 "Banana"

3.4 查询元素

  • contains(Object o):检查链表中是否包含指定元素。
boolean containsApple = list.contains("Apple");  // 返回 true 或 false
  • indexOf(Object o):返回指定元素首次出现的位置。
int index = list.indexOf("Grapes");  // 返回元素 "Grapes" 的索引位置
  • isEmpty():判断链表是否为空。
boolean isEmpty = list.isEmpty();  // 返回 true 或 false

3.5 其他操作

  • size():返回链表中元素的数量。
int size = list.size();  // 返回链表的元素个数
  • clear():清空链表,删除所有元素。
list.clear();  // 清空链表
  • peek():查看链表的第一个元素但不删除。
String first = list.peek();  // 查看第一个元素,不删除
  • peekFirst():查看链表的第一个元素但不删除。
String first = list.peekFirst();  // 查看第一个元素
  • peekLast():查看链表的最后一个元素但不删除。
String last = list.peekLast();  // 查看最后一个元素
  • poll():查看并删除链表的第一个元素。
String first = list.poll();  // 查看并删除第一个元素

4. LinkedList 的性能特点

  • 访问性能:由于 LinkedList 基于链表实现,随机访问元素的时间复杂度是 O(n),这比 ArrayList 的 O(1) 访问效率要低。因此,在频繁进行元素访问的场景中,LinkedList 性能较差。
  • 插入和删除性能:LinkedList 的插入和删除操作比 ArrayList 高效,尤其是在链表的头部或中间进行插入和删除时,时间复杂度是 O(1),因为仅需要修改前后节点的引用即可。

5. LinkedList 与 ArrayList 的对比

  • ArrayList:基于数组实现,适合于频繁随机访问的场景,适合在尾部插入或删除元素,但在头部或中间插入/删除元素时,性能较差。
  • LinkedList:基于双向链表实现,适合频繁进行插入和删除的场景,特别是在列表的头部和中间进行操作时更加高效。但访问元素的时间复杂度是O(n),因此频繁访问时性能较差。

6. 常见的使用场景

  • 频繁插入和删除:LinkedList 是一个很好的选择,特别是在头部和中间进行插入和删除时,它的性能优于 ArrayList。
  • 双端队列操作:由于 LinkedList 实现了 Deque 接口,可以方便地实现双端队列的操作,如在队列两端插入和删除元素。

7. 总结

  • LinkedList 是一个基于双向链表的集合类,适合用于频繁进行插入和删除操作的场景。 它提供了比 ArrayList 更好的插入/删除性能,尤其是在链表的头部和中间。
  • 与 ArrayList 相比,LinkedList 的元素访问速度较慢,因为需要遍历链表来找到指定位置的元素。
    适合在需要频繁操作头尾元素的场景下使用,如双端队列(Deque)等。

相关文章:

Java LinkedList(单列集合)

LinkedList 是 Java 中实现了 List 接口的一个类&#xff0c;它属于 java.util 包。与 ArrayList 不同&#xff0c;LinkedList 是基于双向链表实现的&#xff0c;适合于频繁进行插入和删除操作的场景。 1. LinkedList 的基本特性 基于链表实现&#xff1a;LinkedList 使用双向…...

多线程基础面试题剖析

一、线程的创建方式有几种 创建线程的方式有两种&#xff0c;一种是继承Thread&#xff0c;一种是实现Runable 在这里推荐使用实现Runable接口&#xff0c;因为java是单继承的&#xff0c;一个类继承了Thread将无法继承其他的类&#xff0c;而java可以实现多个接口&#xff0…...

.NET SixLabors.ImageSharp v1.0 图像实用程序控制台示例

使用 C# 控制台应用程序示例在 Windows、Linux 和 MacOS 机器上处理图像&#xff0c;包括创建散点图和直方图&#xff0c;以及根据需要旋转图像以便正确显示。 这个小型实用程序库需要将 NuGet SixLabors.ImageSharp包&#xff08;版本 1.0.4&#xff09;添加到.NET Core 3.1/ …...

EasyExcel提取excel文档

目录 一、前言二、提取excel文档2.1、所有sheet----获取得到headerList和总行数2.2、所有sheet----获取合并单元格信息2.3、读取某个sheet的每行数据一、前言 EasyExcel 是阿里巴巴开源的一个高性能 Excel 读写库,相比于 Apache POI 和 JXL,它有明显的优势,特别是在处理大数…...

第十五届蓝桥杯嵌入式省赛真题(满分)

第十五届蓝桥杯嵌入式省赛真题 目录 第十五届蓝桥杯嵌入式省赛真题 一、题目 二、分析 1、配置 2、变量定义 3、LCD显示模块 4、按键模块 5、数据分析和处理模块 1、频率突变 2、频率超限 3、数据处理 三、评价结果 一、题目 二、分析 1、配置 首先是配置cubemx…...

ASP.NET Core Web应用(.NET9.0)读取数据库表记录并显示到页面

1.创建ASP.NET Core Web应用 选择.NET9.0框架 安装SqlClient依赖包 2.实现数据库记录读取: 引用数据库操作类命名空间 创建查询记录结构类 查询数据并返回数据集合 3.前端遍历数据并动态生成表格显示 生成结果:...

【Sceneform-EQR】实现3D场景背景颜色的定制化(背景融合的方式、Filament材质定制)

写在前面的话 Sceneform-EQR是基于&#xff08;filament&#xff09;扩展的一个用于安卓端的渲染引擎。故本文内容对Sceneform-EQR与Filament都适用。 需求场景 在使用Filament加载三维场景的过程中&#xff0c;一个3D场景对应加载一个背景纹理。而这样的话&#xff0c;即便…...

LeetCode1706

LeetCode1706 目录 LeetCode1706题目描述示例题目理解问题描述 示例分析思路分析问题核心 代码段代码逐行讲解1. 获取网格的列数2. 初始化结果数组3. 遍历每个球4. 逐行模拟下落过程5. 检查是否卡住6. 记录结果7. 返回结果数组 复杂度分析时间复杂度空间复杂度 总结的知识点1. …...

2517. 礼盒的最大甜蜜度(Maximum Tastiness of Candy Box)

2517. 礼盒的最大甜蜜度&#xff08;Maximum Tastiness of Candy Box&#xff09; 问题描述 给定一个正整数数组 price&#xff0c;其中 price[i] 表示第 i 类糖果的价格&#xff0c;另给定一个正整数 k。商店将 k 类不同糖果组合成礼盒出售。礼盒的甜蜜度是礼盒中任意两种糖…...

Golang 的字符编码与 regexp

前言 最近在使用 Golang 的 regexp 对网络流量做正则匹配时&#xff0c;发现有些情况无法正确进行匹配&#xff0c;找到资料发现 regexp 内部以 UTF-8 编码的方式来处理正则表达式&#xff0c;而网络流量是字节序列&#xff0c;由其中的非 UTF-8 字符造成的问题。 我们这里从 G…...

利用ollama 与deepseek r1大模型搭建本地知识库

1.安装运行ollama ollama下载 https://ollama.com/download/windows 验证ollama是否安装成功 ollama --version 访问ollama本地地址&#xff1a; http://localhost:11434/ 出现如下界面 ollama运行模型 ollama run llama3.2 ollama常用操作命令 启动 Ollama 服务&#xf…...

Java短信验证功能简单使用

注册登录阿里云官网&#xff1a;https://www.aliyun.com/ 搜索短信服务 自己一步步申请就可以了 开发文档&#xff1a; https://next.api.aliyun.com/api-tools/sdk/Dysmsapi?version2017-05-25&languagejava-tea&tabprimer-doc 1.引入依赖 <dependency>…...

CAS单点登录(第7版)21.可接受的使用政策

如有疑问&#xff0c;请看视频&#xff1a;CAS单点登录&#xff08;第7版&#xff09; 可接受的使用政策 概述 可接受的使用政策 CAS 也称为使用条款或 EULA&#xff0c;它允许用户在继续应用程序之前接受使用策略。此功能的生产级部署需要修改流&#xff0c;以便通过外部存…...

53倍性能提升!TiDB 全局索引如何优化分区表查询?

作者&#xff1a; Defined2014 原文来源&#xff1a; https://tidb.net/blog/7077577f 什么是 TiDB 全局索引 在 TiDB 中&#xff0c;全局索引是一种定义在分区表上的索引类型&#xff0c;它允许索引分区与表分区之间建立一对多的映射关系&#xff0c;即一个索引分区可以对…...

Pythong 解决Pycharm 运行太慢

Pythong 解决Pycharm 运行太慢 官方给Pycharm自身占用的最大内存设低估了限制,我的Pycharm刚开始默认是256mb。 首先找到自己的Pycharm安装目录 根据合适自己的改 保存&#xff0c;重启Pycharm...

库里存储的数据有大量回车时,该如何进行存取

如图&#xff0c;打印模板存了很多坐标性的字段数据&#xff1a; 大量带换行的文本数据存到库里之后取出&#xff0c;前端需要做非空、合法校验&#xff0c; 然后在循环中&#xff0c;使用eval 函数接收每一句字符串&#xff0c;去执行这句 JavaScript 代码。 let arrStr tem…...

【devops】Github Actions Secrets | 如何在Github中设置CI的Secret供CI的yaml使用

一、Github Actions 1、ci.yml name: CIon: [ push ]jobs:build:runs-on: ubuntu-lateststeps:- name: Checkout codeuses: actions/checkoutv3- name: Set up Gouses: actions/setup-gov4with:go-version: 1.23.0- name: Cache Go modulesuses: actions/cachev3with:path: |…...

体验 DeepSeek-R1:解密 1.5B、7B、8B 版本的强大性能与应用

文章目录 &#x1f34b;引言&#x1f34b;DeepSeek 模型简介&#x1f34b;版本更新&#xff1a;1.5B、7B、8B 的区别与特点&#x1f34b;模型评估&#x1f34b;体验 DeepSeek 的过程&#x1f34b;总结 &#x1f34b;引言 随着大规模语言模型的持续发展&#xff0c;许多模型在性…...

一文说清楚什么是Token以及项目中使用Token延伸的问题

首先可以参考我的往期文章&#xff0c;我这里说清楚了Cookie&#xff0c;Seesion&#xff0c;Token以及JWT是什么 其实Token你就可以理解成这是一个认证令牌就好了 详细分清Session&#xff0c;Cookie和Token之间的区别&#xff0c;以及JWT是什么东西_还分不清 cookie、sessi…...

大模型-Tool call、检索增强

大模型 Tool call 心知天气&#xff1a;https://www.seniverse.com/ 例子&#xff1a;调用天气接口 API from openai import OpenAI import requests import json """ ##### 天气接口 API 密钥获取&#xff1a;https://www.free-api.com/doc/558 ##### &quo…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...