LinkedList、Vector、Set

news2025/6/8 8:41:58

LinkedList

基本概念

LinkedList 是一个双向链表的实现类,它实现了 ListDequeQueueCloneable 接口,底层使用双向链表结构,适合频繁插入和删除操作。

主要特点

  • 有序,可重复。

  • 查询速度较慢,插入/删除速度较快(相较于 ArrayList)。

  • 允许 null 元素。

  • 线程不安全,效率高于 Vector

常用方法

方法描述
add(E e)在末尾添加元素
add(int index, E element)在指定位置插入元素
remove(int index)删除指定位置元素
get(int index)获取指定位置元素
getFirst() / getLast()获取第一个 / 最后一个元素
removeFirst() / removeLast()删除第一个 / 最后一个元素
offer(E e)添加到队列末尾
poll()弹出队列头部元素

适用场景

  • 频繁增删元素的场景,如队列、栈的实现。

  • 实现双向队列(Deque)。

JAVA中实现队列

// 创建单向链表
LinkedList<String> list = new LinkedList<>();
​
// 添加元素
list.push("元素1");
list.push("元素2");
list.push("元素3");
​
// 遍历链表
 System.out.println("未移除的链表元素:" + list);
​
//移除元素 最新添加的元素
list.remove();
​
// 遍历链表
System.out.println("移除最新元素后的链表元素:" + list);
​
//创建双向链表
LinkedList<String> queue = new LinkedList<>();
queue.offer("元素A");
queue.offer("元素B");
queue.offer("元素C");
​
// 遍历双向链表
System.out.println("链表元素:" + queue.poll()); // 获取并移除头部元素

Vector

基本概念

Vector 是一种动态数组的实现,线程安全,是 Java 早期的集合类之一。它实现了 List 接口。

主要特点

  • 底层是数组,支持快速随机访问。

  • 增长方式为:容量不足时,扩容为原来的 2 倍

  • 线程安全:所有方法都是同步(synchronized)方法,效率比 ArrayList 低。

  • 允许 null 元素。

常用方法

方法描述
add(E e)添加元素到末尾
add(int index, E element)在指定位置插入
remove(int index)移除指定位置元素
get(int index)获取指定索引元素
size()获取大小
capacity()当前容量
trimToSize()将容量调整为当前大小,节省内存
ensureCapacity(int minCapacity)确保最小容量

适用场景

  • 多线程并发环境中需要使用线程安全的 List。

  • 遗留系统或兼容旧代码(现代开发中很少使用)。

总结对比

Set相关知识

Set 是 Java 集合框架中一个 不允许重复元素 的集合接口。

它的常见实现类包括:

  • HashSet:基于哈希表,无序,查找/插入快。

  • TreeSet:基于红黑树,有序,可排序。

  • LinkedHashSet:有插入顺序,内部基于 HashSet + 双向链表。

HashSet

HashSet 是一个基于 HashMap 实现的 Set,底层使用哈希表来存储元素,不保证元素顺序

public HashSet() {
    map = new HashMap<>();
}

实际上每个元素都作为 HashMapkey 存储,value 是一个固定对象 PRESENT

添加元素时,先调用 hashCode() → 再调用 equals() 判断是否重复。

时间复杂度:增删查为 O(1)(理想状态下),HashSet 无序的原因是:元素存储在哈希桶中,位置取决于 hashCode

Set<String> set = new HashSet<>();
 // 添加元素
 set.add("Hello");
 set.add("World");
 set.add("!!");
​
 //遍历元素
 for (String s : set) {
     System.out.println(s);
 }

TreeSet

TreeSet 是一个有序的 Set,底层基于 红黑树(自平衡二叉搜索树),元素自动按排序顺序排列,不允许重复元素

Set<Integer> treeSet = new HashSet<>();
// 添加元素
treeSet.add(5);
treeSet.add(9);
treeSet.add(3);
treeSet.add(1);
treeSet.add(7);
​
// 遍历元素
treeSet.forEach(System.out::println);
特性HashSetTreeSet
元素是否排序❌ 无序✅ 自动排序
底层结构HashMapTreeMap(红黑树)
插入复杂度O(1)O(log n)
是否允许 null✅ 允许一个⚠️ 最多允许一个(仅在无 Comparator 情况下)
是否线程安全❌ 否❌ 否

特性LinkedListVector
底层结构双向链表动态数组
是否线程安全
插入删除效率
随机访问效率
是否过时是(被 ArrayList + Collections.synchronizedList() 替代)
适用场景队列、栈等多线程旧代码中使用

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

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

相关文章

【计算机网络】Linux下简单的TCP服务器(超详细)

服务端 创建套接字 &#x1f4bb;我们将TCP服务器封装成一个类&#xff0c;当我们定义出一个服务器对象后需要马上对服务器进行初始化&#xff0c;而初始化TCP服务器要做的第一件事就是创建套接字。 TCP服务器在调用socket函数创建套接字时&#xff0c;参数设置如下&#xff1…

最新Spring Security实战教程(十七)企业级安全方案设计 - 多因素认证(MFA)实现

&#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Micro麦可乐的博客 &#x1f425;《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程&#xff0c;入门到实战 &#x1f33a;《RabbitMQ》…

html+css+js趣味小游戏~Cookie Clicker放置休闲(附源码)

下面是一个简单的记忆卡片配对游戏的完整代码&#xff0c;使用HTML、CSS和JavaScript实现&#xff1a; html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"wid…

SDC命令详解:使用set_propagated_clock命令进行约束

相关阅读 SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm1001.2014.3001.5482 目录 指定端口列表/集合 简单使用 注意事项 传播时钟是在进行了时钟树综合后&#xff0c;使用set_propagated_clock命令可以将一个理想时钟转换为传播时钟&#x…

win32相关(消息Hook)

消息Hook 要想实现消息Hook需要使用到三个相关的Api SetWindowsHookEx // 设置钩子CallNextHookEx // 将钩子信息传递到当前钩子链中的下一个子程序UnhookWindowsHookEx // 卸载钩子 我们编写的消息钩子需要将设置钩子的函数写到dll里面&#xff0c;当钩住一个线程后&#xff…

mysql 页的理解和实际分析

目录 页&#xff08;Page&#xff09;是 Innodb 存储引擎用于管理数据的最小磁盘单位B树的一般高度记录在页中的存储 innodb ibd文件innodb 页类型分析ibd文件查看数据表的行格式查看ibd文件 分析 ibd的第4个页&#xff1a;B-tree Node类型先分析File Header(38字节-描述页信息…

构建 MCP 服务器:第 2 部分 — 使用资源模板扩展资源

该图像是使用 AI 图像创建程序创建的。 这个故事是在多位人工智能助手的帮助下写成的。 这是构建MCP 服务器教程&#xff08;共四部分&#xff09;的第二部分。在第一部分中&#xff0c;我们使用基本资源创建了第一个 MCP 服务器。现在&#xff0c;我们将使用资源模板扩展服务…

【算法设计与分析】实验——汽车加油问题, 删数问题(算法实现:代码,测试用例,结果分析,算法思路分析,总结)

说明&#xff1a;博主是大学生&#xff0c;有一门课是算法设计与分析&#xff0c;这是博主记录课程实验报告的内容&#xff0c;题目是老师给的&#xff0c;其他内容和代码均为原创&#xff0c;可以参考学习&#xff0c;转载和搬运需评论吱声并注明出处哦。 4-1算法实现题 汽车…

【C++进阶篇】C++11新特性(下篇)

C函数式编程黑魔法&#xff1a;Lambda与包装器实战全解析 一. lambda表达式1.1 仿函数使用1.2 lambda表达式的语法1.3 lambda表达式使用1.3.1 传值和传引用捕捉1.3.2 隐式捕捉1.3.3 混合捕捉 1.4 lambda表达式原理1.5 lambda优点及建议 二. 包装器2.1 function2.2 bind绑定 三.…

全生命周期的智慧城市管理

前言 全生命周期的智慧城市管理。未来&#xff0c;城市将在 实现从基础设施建设、日常运营到数据管理的 全生命周期统筹。这将避免过去智慧城市建设 中出现的“碎片化”问题&#xff0c;实现资源的高效配 置和项目的协调发展。城市管理者将运用先进 的信息技术&#xff0c;如物…

echarts柱状图实现动态展示时报错

echarts柱状图实现动态展示时报错 1、问题&#xff1a; 在使用Echarts柱状图时&#xff0c;当数据量过多&#xff0c;x轴展示不下的时候&#xff0c;可以使用dataZoom实现动态展示。如下图所示&#xff1a; 但是当鼠标放在图上面滚动滚轮时或拖动滚动条时会报错&#xff0c;…

408第一季 - 数据结构 - 线性表

只能用C/C&#xff01; 顺序表 闲聊 线性表的逻辑顺序和物理顺序相同 都是1234 顺序表的优点&#xff1a; 随机访问&#xff0c;随机访问的意思是访问的时间 和位置没有关系&#xff0c;访问下标1和100一样的&#xff0c;更深层就是直接计算 a100 * 数组大小&#xff0c;随便…

第23讲、Odoo18 邮件系统整体架构

目录 Odoo 邮件系统整体架构邮件发送方式邮件模板配置SMTP 邮件服务器配置邮件发送过程开发中常见邮件发送需求常见问题排查提示与最佳实践完整示例&#xff1a;审批通过自动发邮件门户表单自动邮件通知案例邮件队列与异步发送邮件添加附件邮件日志与调试多语言邮件模板邮件安…

HarmonyOS:Counter计数器组件

一、概述 计数器组件&#xff0c;提供相应的增加或者减少的计数操作。 说明 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 二、属性 除支持通用属性外&#xff0c;还支持以下属性。 enableInc enableInc(value: b…

sqlsugar WhereIF条件的大于等于和等于查出来的坑

一、如下图所示&#xff0c;当我用 .WhereIF(input.Plancontroltype > 0, u > u.Plancontroltype (DnjqPlancontroltype)input.Plancontroltype) 这里面用等于的时候&#xff0c;返回结果一条数据都没有。 上图中生成的SQL如下&#xff1a; SELECT id AS Id ,code AS …

Pandas 技术解析:从数据结构到应用场景的深度探索

序 我最早用Python做大数据项目时&#xff0c;接触最早的就是Pandas了。觉得对于IT技术人员而言&#xff0c;它是可以属于多场景的存在&#xff0c;因为它的本身就是数据驱动的技术生态中&#xff0c;对于软件工程师而言&#xff0c;它是快速构建数据处理管道的基石&#xff1…

数据库系统概论(十七)超详细讲解数据库规范化与五大范式(从函数依赖到多值依赖,再到五大范式,附带例题,表格,知识图谱对比带你一步步掌握)

数据库系统概论&#xff08;十七&#xff09;超详细讲解数据库规范化与五大范式&#xff08;从函数依赖到多值依赖&#xff0c;再到五大范式&#xff0c;附带例题&#xff0c;表格&#xff0c;知识图谱对比带你一步步掌握&#xff09; 前言一、为什么需要规范化1. 我们先想一个…

并发编程实战(生产者消费者模型)

在并发编程中使用生产者和消费者模式能够解决绝大多数的并发问题。该模式通过平衡生产线程和消费线程的工作能力来提高程序整体处理数据的速度。 生产者和消费者模式&#xff1a; 在线程的世界中生产者就是产生数据的线程&#xff0c;而消费者则是消费数据的线程。在多线程开…

git小乌龟不显示图标状态解决方案

第一步 在开始菜单的搜索处&#xff0c;输入regedit命令&#xff0c;打开注册表。 第二步 在注册表编辑器中&#xff0c;找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers 这一项。 第三步 让Tortoise相关的项目排在前…

获取 OpenAI API Key

你可以按照以下步骤来获取 openai.api_key&#xff0c;用于调用 OpenAI 的 GPT-4、DALLE、Whisper 等 API 服务&#xff1a; &#x1f9ed; 获取 OpenAI API Key 的步骤&#xff1a; ✅ 1. 注册或登录 OpenAI 账号 打开 https://platform.openai.com/ 使用你的邮箱或 Google/…