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 接口的一个类,它属于 java.util 包。与 ArrayList 不同,LinkedList 是基于双向链表实现的,适合于频繁进行插入和删除操作的场景。 1. LinkedList 的基本特性 基于链表实现:LinkedList 使用双向…...
多线程基础面试题剖析
一、线程的创建方式有几种 创建线程的方式有两种,一种是继承Thread,一种是实现Runable 在这里推荐使用实现Runable接口,因为java是单继承的,一个类继承了Thread将无法继承其他的类,而java可以实现多个接口࿰…...
.NET SixLabors.ImageSharp v1.0 图像实用程序控制台示例
使用 C# 控制台应用程序示例在 Windows、Linux 和 MacOS 机器上处理图像,包括创建散点图和直方图,以及根据需要旋转图像以便正确显示。 这个小型实用程序库需要将 NuGet SixLabors.ImageSharp包(版本 1.0.4)添加到.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是基于(filament)扩展的一个用于安卓端的渲染引擎。故本文内容对Sceneform-EQR与Filament都适用。 需求场景 在使用Filament加载三维场景的过程中,一个3D场景对应加载一个背景纹理。而这样的话,即便…...
LeetCode1706
LeetCode1706 目录 LeetCode1706题目描述示例题目理解问题描述 示例分析思路分析问题核心 代码段代码逐行讲解1. 获取网格的列数2. 初始化结果数组3. 遍历每个球4. 逐行模拟下落过程5. 检查是否卡住6. 记录结果7. 返回结果数组 复杂度分析时间复杂度空间复杂度 总结的知识点1. …...
2517. 礼盒的最大甜蜜度(Maximum Tastiness of Candy Box)
2517. 礼盒的最大甜蜜度(Maximum Tastiness of Candy Box) 问题描述 给定一个正整数数组 price,其中 price[i] 表示第 i 类糖果的价格,另给定一个正整数 k。商店将 k 类不同糖果组合成礼盒出售。礼盒的甜蜜度是礼盒中任意两种糖…...
Golang 的字符编码与 regexp
前言 最近在使用 Golang 的 regexp 对网络流量做正则匹配时,发现有些情况无法正确进行匹配,找到资料发现 regexp 内部以 UTF-8 编码的方式来处理正则表达式,而网络流量是字节序列,由其中的非 UTF-8 字符造成的问题。 我们这里从 G…...
利用ollama 与deepseek r1大模型搭建本地知识库
1.安装运行ollama ollama下载 https://ollama.com/download/windows 验证ollama是否安装成功 ollama --version 访问ollama本地地址: http://localhost:11434/ 出现如下界面 ollama运行模型 ollama run llama3.2 ollama常用操作命令 启动 Ollama 服务…...
Java短信验证功能简单使用
注册登录阿里云官网:https://www.aliyun.com/ 搜索短信服务 自己一步步申请就可以了 开发文档: https://next.api.aliyun.com/api-tools/sdk/Dysmsapi?version2017-05-25&languagejava-tea&tabprimer-doc 1.引入依赖 <dependency>…...
CAS单点登录(第7版)21.可接受的使用政策
如有疑问,请看视频:CAS单点登录(第7版) 可接受的使用政策 概述 可接受的使用政策 CAS 也称为使用条款或 EULA,它允许用户在继续应用程序之前接受使用策略。此功能的生产级部署需要修改流,以便通过外部存…...
53倍性能提升!TiDB 全局索引如何优化分区表查询?
作者: Defined2014 原文来源: https://tidb.net/blog/7077577f 什么是 TiDB 全局索引 在 TiDB 中,全局索引是一种定义在分区表上的索引类型,它允许索引分区与表分区之间建立一对多的映射关系,即一个索引分区可以对…...
Pythong 解决Pycharm 运行太慢
Pythong 解决Pycharm 运行太慢 官方给Pycharm自身占用的最大内存设低估了限制,我的Pycharm刚开始默认是256mb。 首先找到自己的Pycharm安装目录 根据合适自己的改 保存,重启Pycharm...
库里存储的数据有大量回车时,该如何进行存取
如图,打印模板存了很多坐标性的字段数据: 大量带换行的文本数据存到库里之后取出,前端需要做非空、合法校验, 然后在循环中,使用eval 函数接收每一句字符串,去执行这句 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 版本的强大性能与应用
文章目录 🍋引言🍋DeepSeek 模型简介🍋版本更新:1.5B、7B、8B 的区别与特点🍋模型评估🍋体验 DeepSeek 的过程🍋总结 🍋引言 随着大规模语言模型的持续发展,许多模型在性…...
一文说清楚什么是Token以及项目中使用Token延伸的问题
首先可以参考我的往期文章,我这里说清楚了Cookie,Seesion,Token以及JWT是什么 其实Token你就可以理解成这是一个认证令牌就好了 详细分清Session,Cookie和Token之间的区别,以及JWT是什么东西_还分不清 cookie、sessi…...
大模型-Tool call、检索增强
大模型 Tool call 心知天气:https://www.seniverse.com/ 例子:调用天气接口 API from openai import OpenAI import requests import json """ ##### 天气接口 API 密钥获取:https://www.free-api.com/doc/558 ##### &quo…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
