Java集合框架中的List、Map、Set详解
在Java开发中,集合框架是处理数据时不可或缺的工具之一。今天,我们来深入了解一下Java集合框架中的
List、Map和Set,并探讨它们的常见方法操作。
目录
一、List集合
1.1 List集合介绍
1.2 List集合的常见方法
添加元素
获取元素
修改元素
删除元素
元素排序
1.3 List的不同实现类
二、Map集合
2.1 Map集合介绍
2.2 Map集合的常见方法
添加键值对
获取值
检查键或值是否存在
删除键值对
2.3 Map的不同实现类
三、Set集合
3.1 Set集合介绍
3.2 Set集合的常见方法
添加元素
检查元素是否存在
移除元素
3.3 Set的不同实现类
总结

一、List集合
1.1 List集合介绍
List是Java集合框架中的一个接口,它是一个有序的集合,允许存储重复的元素。List中的元素可以通过索引进行访问,这使得它在需要频繁访问元素的场景中非常有用。常见的List实现类有ArrayList和LinkedList。
1.2 List集合的常见方法
添加元素
-
add(E e):将指定元素添加到列表末尾。 -
add(int index, E element):在指定位置插入元素。
import java.util.ArrayList;
import java.util.List;public class ListAddExample {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("Apple"); // 添加到末尾list.add(0, "Banana"); // 在索引0处插入System.out.println("List: " + list);}
}
获取元素
-
get(int index):返回列表中指定位置的元素。 -
indexOf(Object o):返回首次出现的指定元素的索引;如果未找到,则返回-1。 -
lastIndexOf(Object o):返回最后一次出现的指定元素的索引;如果未找到,则返回-1。
import java.util.ArrayList;
import java.util.List;public class ListGetExample {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("Apple");list.add("Banana");list.add("Orange");String fruit = list.get(1); // 获取索引1处的元素System.out.println("Element at index 1: " + fruit);int index = list.indexOf("Orange"); // 查找"Orange"的索引System.out.println("Index of 'Orange': " + index);int lastIndex = list.lastIndexOf("Banana"); // 查找最后一个"Banana"的索引System.out.println("Last index of 'Banana': " + lastIndex);}
}
修改元素
-
set(int index, E element):用指定元素替换列表中指定位置的元素,并返回被替换的元素。
import java.util.ArrayList;
import java.util.List;public class ListSetExample {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("Apple");list.add("Banana");list.add("Orange");String oldFruit = list.set(1, "Grape"); // 修改索引1处的元素System.out.println("Replaced element: " + oldFruit);System.out.println("Updated list: " + list);}
}
删除元素
-
remove(int index):删除指定位置的元素。 -
remove(Object o):删除首次出现的指定元素。
import java.util.ArrayList;
import java.util.List;public class ListRemoveExample {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("Apple");list.add("Banana");list.add("Orange");list.remove(1); // 删除索引1处的元素list.remove("Orange"); // 删除"Orange"System.out.println("Updated list: " + list);}
}
元素排序
从Java 8开始,List接口提供了sort()方法,可以直接对列表进行排序。
import java.util.ArrayList;
import java.util.List;public class ListSortMethodExample {public static void main(String[] args) {List<Integer> list = new ArrayList<>();list.add(3);list.add(1);list.add(4);list.add(2);list.sort((o1, o2) -> o1.compareTo(o2)); // 升序排序System.out.println("Sorted list: " + list);}
}
1.3 List的不同实现类
| 实现类 | 特点 |
|---|---|
ArrayList | 基于动态数组实现,支持快速随机访问,适合频繁读取操作,但插入和删除效率较低 |
LinkedList | 基于双向链表实现,适合频繁插入和删除操作,但随机访问效率较低 |
二、Map集合
2.1 Map集合介绍
Map是Java集合框架中的一个接口,用于存储键值对(key-value)形式的数据。在Map中,键(key)必须是唯一的,而值(value)可以重复。常见的Map实现类有HashMap、TreeMap和HashTable。
2.2 Map集合的常见方法
添加键值对
-
put(K key, V value):向Map中添加键值对。
import java.util.HashMap;
import java.util.Map;public class MapPutExample {public static void main(String[] args) {Map<String, Integer> map = new HashMap<>();map.put("Apple", 1);map.put("Banana", 2);System.out.println("Map: " + map);}
}
获取值
-
get(Object key):根据键获取对应的值。
import java.util.HashMap;
import java.util.Map;public class MapGetExample {public static void main(String[] args) {Map<String, Integer> map = new HashMap<>();map.put("Apple", 1);map.put("Banana", 2);Integer value = map.get("Apple"); // 获取键为"Apple"的值System.out.println("Value for 'Apple': " + value);}
}
检查键或值是否存在
-
containsKey(Object key):判断Map中是否包含指定的键。 -
containsValue(Object value):判断Map中是否包含指定的值。
import java.util.HashMap;
import java.util.Map;public class MapContainsExample {public static void main(String[] args) {Map<String, Integer> map = new HashMap<>();map.put("Apple", 1);map.put("Banana", 2);boolean hasKey = map.containsKey("Apple"); // 检查键"Apple"boolean hasValue = map.containsValue(2); // 检查值2System.out.println("Contains key 'Apple': " + hasKey);System.out.println("Contains value 2: " + hasValue);}
}
删除键值对
-
remove(Object key):根据键删除对应的键值对。
import java.util.HashMap;
import java.util.Map;public class MapRemoveExample {public static void main(String[] args) {Map<String, Integer> map = new HashMap<>();map.put("Apple", 1);map.put("Banana", 2);map.remove("Apple"); // 删除键为"Apple"的键值对System.out.println("Updated map: " + map);}
}
2.3 Map的不同实现类
| 实现类 | 特点 |
|---|---|
HashMap | 基于哈希表实现,允许null键和null值,线程不安全,性能高 |
TreeMap | 基于红黑树实现,按键的自然顺序或自定义顺序排序,不允许null键 |
LinkedHashMap | 维护插入顺序,性能与HashMap接近,线程不安全 |
HashTable | 线程安全,不允许null键或null值,性能较低 |
三、Set集合
3.1 Set集合介绍
Set是Java集合框架中的一个接口,它不允许存储重复元素。Set中的元素通常没有固定的存储顺序,但某些实现类(如TreeSet)可以保持有序。常见的Set实现类有HashSet、LinkedHashSet和TreeSet。
3.2 Set集合的常见方法
添加元素
-
add(E e):向集合中添加一个元素,如果元素已存在,则返回false。
import java.util.HashSet;
import java.util.Set;public class SetAddExample {public static void main(String[] args) {Set<String> set = new HashSet<>();boolean added1 = set.add("Apple"); // 添加元素boolean added2 = set.add("Banana");boolean added3 = set.add("Apple"); // 尝试添加重复元素System.out.println("Added 'Apple': " + added1);System.out.println("Added 'Banana': " + added2);System.out.println("Added 'Apple' again: " + added3);System.out.println("Set content: " + set);}
}
检查元素是否存在
-
contains(Object o):检查集合中是否包含指定元素。
import java.util.HashSet;
import java.util.Set;public class SetContainsExample {public static void main(String[] args) {Set<String> set = new HashSet<>();set.add("Apple");set.add("Banana");boolean containsApple = set.contains("Apple"); // 检查是否包含"Apple"boolean containsOrange = set.contains("Orange"); // 检查是否包含"Orange"System.out.println("Contains 'Apple': " + containsApple);System.out.println("Contains 'Orange': " + containsOrange);}
}
移除元素
-
remove(Object o):从集合中移除指定元素。
import java.util.HashSet;
import java.util.Set;public class SetRemoveExample {public static void main(String[] args) {Set<String> set = new HashSet<>();set.add("Apple");set.add("Banana");boolean removed = set.remove("Apple"); // 移除"Apple"System.out.println("Removed 'Apple': " + removed);System.out.println("Set content after removal: " + set);}
}
3.3 Set的不同实现类
| 实现类 | 特点 |
|---|---|
HashSet | 基于哈希表实现,无序,允许null值,线程不安全 |
LinkedHashSet | 维护插入顺序,性能与HashSet接近,线程不安全 |
TreeSet | 基于红黑树实现,按键的自然顺序或自定义顺序排序,不允许null值 |
总结

List是一个有序的集合,允许重复元素,适合需要频繁访问元素的场景。
Map是一个键值对集合,键唯一,值可以重复,适合需要通过键快速查找值的场景。
Set是一个不允许重复元素的集合,适合需要存储唯一元素的场景。
通过掌握这些集合的特点和常见方法,我们可以根据具体需求选择合适的集合类型,从而更高效地处理数据。希望这篇文章对你有所帮助!
相关文章:
Java集合框架中的List、Map、Set详解
在Java开发中,集合框架是处理数据时不可或缺的工具之一。今天,我们来深入了解一下Java集合框架中的List、Map和Set,并探讨它们的常见方法操作。 目录 一、List集合 1.1 List集合介绍 1.2 List集合的常见方法 添加元素 获取元素 修改元素…...
让机器学习更透明:使用 Python 开发可解释性模型工具包
友友们好! 我是Echo_Wish,我的的新专栏《Python进阶》以及《Python!实战!》正式启动啦!这是专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。 在这个专栏中,你将会…...
OpenStack Yoga版安装笔记(23)Swift安装
一、官方文档 Object Storage Install Guide — Swift 2.29.3.dev5 documentation 二、环境准备 之前的实验,已经有controller, compute1, block1节点,并已经完成Keystone、Glance、Nova、Neutron、Cinder等主要OpenStack Service的安装。 此处新增…...
MRO 工业品电商系统:智能精准匹配,快速满足采购需求
在竞争激烈的工业领域,企业对 MRO 工业品的采购需求越来越多。但传统 MRO 采购存在信息不透明、客户选型困难,流程复杂处理周期长、库存信息不明确、成本高和客户价格管理混乱等诸多问题。随着电商发展,MRO 工业品电商系统出现,给…...
2025年Q1数据安全政策、规范、标准以及报告汇总共92份(附下载)
一、政策演进趋势分析 (一)国家级政策新动向 数据要素市场建设 数据流通安全治理方案(重点解析数据确权与交易规则) 公共数据授权运营规范(创新性提出分级授权机制) 新兴技术安全规范 人工智能安全标准…...
基于Python Django 的全国房价大数据可视化系统(附源码,部署)
博主介绍:✌程序员徐师兄,7年大厂开发经验。全网粉丝12w,CSDN博客专家,同时活跃在掘金、华为云、阿里云、InfoQ等平台,专注Java技术和毕业项目实战分享✌ 🍅文末获取源码联系🍅 👇&a…...
项目班——0408——qt的多线程开发
目录 一、并发、并行的概念 1. 并发 例子 2. 并行 二、qt的多线程开发 三、Qt多线程开发方法 1、可以使用QTthread 创建线程 来执行线程函数 2、可以借助moveToThread将对象转移到另一个线程中,然后执行 一、并发、并行的概念 1. 并发 多个任务在同一时间…...
每天学一个 Linux 命令(25):more
可访问网站查看,视觉品味拉满: http://www.616vip.cn/25/index.html 每天学一个 Linux 命令(25):more 命令简介 more 是一个经典的分页显示文本文件内容的命令行工具,适用于逐页浏览长文本文件。它简单易用,适合快速查看内容,但功能比 less 更为基础(不支持向后翻…...
那就聊一聊mysql的锁
MySQL 的锁机制是数据库并发控制的核心,作为 Java 架构师需要深入理解其实现原理和适用场景。以下是 MySQL 锁机制的详细解析: 一、锁的分类维度 1. 按锁粒度划分 锁粒度特点适用场景全局锁锁定整个数据库(FLUSH TABLES WITH READ LOC…...
python(八)-数据类型转换
#数据类型转换 #转换为整型int #字符串str--》整数int #纯数字的字符串可以转换,否则会报错 s 2025 n int(s) print(type(s),type(n)) print(n)#浮点数float--》整数int s1 2.23 print(int(s1))#bool-->整数int s2,s3 True,False print(int(s2),int(s3))#转…...
Python语法系列博客 · 第7期[特殊字符] 列表推导式与字典推导式:更优雅地处理数据结构
上一期小练习解答(第6期回顾) ✅ 练习1:统计文件行数 with open("data.txt", "r", encoding"utf-8") as f:lines f.readlines()print(f"总行数:{len(lines)}")✅ 练习2:反…...
如何0基础学stm32?
如何0基础学stm32? 作为一个混迹嵌入式领域十余年的老兵,每次看到"0基础学STM32"这样的提问,我都忍不住想笑,又有些无奈。这就像问"如何0基础学开飞机"一样—虽然理论上可行,但过程恐怕没那么愉快…...
Cesium 加载 本地 b3dm 格式文件 并且 获取鼠标点击处经纬度 (亲测可用)
很奇怪cesium 里面只支持 相对路径 不支持绝对路径 我把 模型放在 /***/Cesium-1.128/Apps/SampleData/Cesium3DTiles/Tilesets 下面 "../../SampleData/Cesium3DTiles/Tilesets/terra_b3dms/tileset.json",所有源码 const viewer new Cesium.Viewer("cesiu…...
新能源汽车动力电池热管理方案全解析:开启电车续航与安全的密码
热管理:新能源汽车的隐形守护者 在新能源汽车飞速发展的今天,热管理系统作为保障车辆核心部件稳定运行的关键,正逐渐成为行业关注的焦点。据市场研究机构的数据显示,近年来新能源汽车的销量持续攀升,而与之相伴的是热…...
无需训练的具身导航探索!TRAVEL:零样本视觉语言导航中的检索与对齐
作者: Navid Rajabi, Jana Kosecka 单位:乔治梅森大学计算机科学系 论文标题:TRAVEL: Training-Free Retrieval and Alignment for Vision-and-Language Navigation 论文链接:https://arxiv.org/pdf/2502.07306 主要贡献 提出…...
C#测试linq中的左连接的基本用法
使用linq联表或者连接两个对象集合查询时一般使用的是join关键字,返回结果中包含两个表或两个对象集合中连接字段相等的数据记录,如果要实现sql语句中的左连接效果,并没有现成的left join关键字,此时可以使用DefaultIfEmpty 实现左…...
2025-04-19 Python 强类型编程
文章目录 1 方法标注1.1 参数与返回值1.2 变参类型1.3 函数类型 2 数据类型2.1 内置类型2.2 复杂数据结构2.3 类别选择2.4 泛型 3 标注方式3.1 注释标注3.2 文件标注 4 特殊情形4.1 前置引用4.2 函数标注扩展4.3 协变与逆变4.4 dataclass 5 高级内容5.1 接口5.2 泛型的协变/逆变…...
Java大模型MCP服务端开发-数据库查询与数据分析(附源码)
Java大模型MCP服务端开发-数据库查询 MCP服务器概述安装依赖服务端对象服务器传输服务器功能客户端测试源码地址MCP服务器概述 MCP服务器是模型上下文协议(MCP)架构中的基础组件,为客户端提供工具、资源和功能。它实现了协议的服务器端,负责: 暴露客户端可以发现和执行的工…...
spring-batch批处理框架(2)
文章目录 八、作业控制8.1 作业启动8.1.1 SpringBoot 启动8.1.2 Spring 单元测试启动8.1.3 RESTful API 启动 8.2 作业停止方案1:Step 步骤监听器方式方案2:StepExecution停止标记 8.3 作业重启8.3.1 禁止重启8.3.2 限制重启次数8.3.3 无限重启 九、Item…...
鸿蒙NEXT开发键盘工具类(ArkTs)
export declare type KeyboardCallBack (show: boolean, height: number) > void; import { AppUtil } from ./AppUtil; import { LogUtil } from ./LogUtil; import { ArrayUtil } from ./ArrayUtil;/*** 键盘工具类* author 鸿蒙布道师* since 2025/04/18*/ export class…...
动态规划算法的欢乐密码(一):斐波那契数模型
专栏:算法的魔法世界 个人主页:手握风云 目录 一、动态规划 二、例题讲解 2.1. 第 N 个泰波那契数 2.2. 三步问题 2.3. 使用最小花费爬楼梯 2.4. 解码方法 一、动态规划 动态规划是一种将复杂问题分解为更小的子问题,并利用子问题的解来…...
Echarts柱状图斜线环纹(图形的贴花图案)
单独设置 <!--此示例下载自 https://echarts.apache.org/examples/zh/editor.html?cbar-stack&codePYBwLglsB2AEC8sDeAoWszGAG0iAXMmuhgE4QDmFApqYQOQCGAHhAM70A0x6L7ACsAjQwtQqhIkwATxDUGbABaMAJsADu9HrAC-xHd3TZqNaCvEHiFcuaKTjAMzAMAzAFIu28hUXPY9ABYPQxIAI2AwTABbV…...
2025.04.19【Spider】| 蜘蛛图绘制技巧精解
Basic multi-group radar chart Start with a basic version, learn how to format your input dataset Radar chart with ggradar A Spider chart made using the ggradar package and a lot of customization.A work by Tuo Wang 文章目录 Basic multi-group radar chartRa…...
机器学习误差图绘
机器学习误差图绘制 绘图类 # Define the ModelComparisonPlot class class ModelComparisonPlot:def __init__(self, model_name):self.model_name model_namedef plot_comparison(self, y_val, y_pred, mse, mae, r2):# Create a figure with two subplotsfig, axes plt.…...
llama-factory微调报错:
报错信息 [INFO] [utils.py:789:see_memory_usage] CPU Virtual Memory: used 81.51 GB, percent 64.9% W0419 10:14:27.573000 108354 site-packages/torch/distributed/elastic/multiprocessing/api.py:897] Sending process 108373 closing signal SIGTERM W0419 10:14:27…...
【Linux】深入理解Linux文件系统:从C接口到内核设计哲学
文章目录 前言一、C语言中的文件接口1. 文件指针(句柄)FILE*以写方式打开文件,若文件不存在会新建一个文件W写入方式,在打开文件之前都会将文件内容全部清空追加写方式,其用法与写方法一致,不同在于a方法可…...
基于尚硅谷FreeRTOS视频笔记——15—系统配制文件说明与数据规范
目录 配置函数 INCLUDE函数 config函数 数据类型 命名规范 函数与宏 配置函数 官网上可以查找 最核心的就是 config和INCLUDE INCLUDE函数 这些就是裁剪的函数 它们使用一个ifndef。如果定义了,就如果定义了这个宏定义,那么代码就生效。 通过ifn…...
Linux网络编程 深入解析TFTP协议:基于UDP的文件传输实战
知识点1【TFTP的概述】 学习通信的基本:通信协议(具体发送上面样的报文)、通信流程(按照什么步骤发送) 1、TFTP的概述 tftp:简单文件传输协议,**基于UDP,**不进行用户有效性验证 …...
c# MES生产进度看板,报警看板 热流道行业可用实时看生产进度
MES生产进度看板,报警看板 热流道行业可用实时看生产进度 背景 本软件是给宁波热流道行业客户开发的生产电子看板软件系统 功能 1.录入工艺流程图(途程图)由多个站别组成。可以手动设置每个工艺站点完成百分比。 2.可以看生成到哪个工…...
Qt unknown module(s) in qt:serialport解决方法
在Ubuntu和CentOS系统中,若使用Qt时遇到Unknown module(s) in QT: serialport错误,通常是由于未正确安装Qt的串口模块(QSerialPort)或项目配置不当导致。以下是针对两种系统的解决方案: 一、安装Qt串口模块 1. Ubuntu/Debian系列 安装开发包: 执行以下命令安装Qt5串口模…...
