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

java集合详细讲解

Java 8 集合框架详解

Java集合框架是Java中最重要、最常用的API之一,Java 8对其进行了多项增强。下面我将全面讲解Java 8中的集合框架。

一、集合框架概述

Java集合框架主要分为两大类:

  1. Collection - 单列集合

    • List:有序可重复
    • Set:无序不重复
    • Queue:队列
  2. Map - 双列集合(键值对)

二、List接口及实现类

1. ArrayList

List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("C++");// Java 8新增方法
list.removeIf(s -> s.length() > 4);  // 移除长度大于4的元素
list.replaceAll(String::toUpperCase); // 所有元素转为大写
list.sort(Comparator.naturalOrder()); // 自然排序

2. LinkedList

LinkedList<String> linkedList = new LinkedList<>();
linkedList.addFirst("First");
linkedList.addLast("Last");// Java 8新增方法
linkedList.removeIf(s -> s.startsWith("F"));

3. Vector (线程安全但性能较低)

三、Set接口及实现类

1. HashSet

Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(3);// Java 8新增
set.removeIf(i -> i % 2 == 0);

2. LinkedHashSet (保持插入顺序)

3. TreeSet (自然排序)

TreeSet<String> treeSet = new TreeSet<>();
treeSet.add("Banana");
treeSet.add("Apple");
treeSet.add("Orange");// Java 8方法
String first = treeSet.first();  // Apple
String last = treeSet.last();    // Orange

四、Queue接口及实现类

1. PriorityQueue

PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.add(3);
pq.add(1);
pq.add(2);pq.poll(); // 1 (最小元素)

2. ArrayDeque

Deque<String> deque = new ArrayDeque<>();
deque.offerFirst("First");
deque.offerLast("Last");

五、Map接口及实现类

1. HashMap

Map<String, Integer> map = new HashMap<>();
map.put("Java", 1);
map.put("Python", 2);
map.put("C++", 3);// Java 8新增方法
map.compute("Java", (k, v) -> v == null ? 1 : v + 1); // 值+1
map.computeIfAbsent("JavaScript", k -> 4); // 不存在则添加
map.computeIfPresent("Java", (k, v) -> v + 10); // 存在则更新map.merge("Java", 1, Integer::sum); // 合并值// 遍历
map.forEach((k, v) -> System.out.println(k + ": " + v));

2. LinkedHashMap (保持插入顺序)

3. TreeMap (按键排序)

TreeMap<String, Integer> treeMap = new TreeMap<>();
treeMap.put("Banana", 1);
treeMap.put("Apple", 2);
treeMap.put("Orange", 3);// Java 8方法
Map.Entry<String, Integer> first = treeMap.firstEntry();
Map.Entry<String, Integer> last = treeMap.lastEntry();

4. ConcurrentHashMap (线程安全)

ConcurrentHashMap<String, Integer> concurrentMap = new ConcurrentHashMap<>();
concurrentMap.put("One", 1);
concurrentMap.put("Two", 2);// Java 8新增方法
concurrentMap.forEach(2, (k, v) -> System.out.println(k + ": " + v)); // 并行遍历

六、Java 8集合新特性

1. Stream API

List<String> languages = Arrays.asList("Java", "Python", "C++", "JavaScript");// 过滤
List<String> filtered = languages.stream().filter(s -> s.startsWith("J")).collect(Collectors.toList());// 映射
List<Integer> lengths = languages.stream().map(String::length).collect(Collectors.toList());// 排序
List<String> sorted = languages.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());// 聚合操作
long count = languages.stream().count();
Optional<String> max = languages.stream().max(Comparator.naturalOrder());// 并行流
long countParallel = languages.parallelStream().count();

2. 新的集合方法

Map<String, List<String>> map = new HashMap<>();// 传统方式
if (!map.containsKey("key")) {map.put("key", new ArrayList<>());
}
map.get("key").add("value");// Java 8方式
map.computeIfAbsent("key", k -> new ArrayList<>()).add("value");

3. 增强的迭代方式

List<String> list = Arrays.asList("a", "b", "c");// 传统方式
for (String s : list) {System.out.println(s);
}// Java 8方式
list.forEach(System.out::println);

七、集合工具类 Collections

List<Integer> numbers = Arrays.asList(3, 1, 4, 1, 5, 9);// 排序
Collections.sort(numbers);// Java 8新增
Collections.replaceAll(numbers, 1, 10); // 替换所有1为10// 不可变集合
List<Integer> immutableList = Collections.unmodifiableList(numbers);// 空集合
List<String> emptyList = Collections.emptyList();

八、最佳实践

  1. 选择正确的集合类型

    • 需要快速随机访问 → ArrayList
    • 频繁插入删除 → LinkedList
    • 需要去重 → HashSet
    • 需要键值对 → HashMap
  2. 初始化时指定容量(特别是大型集合)

    new ArrayList<>(1000);
    new HashMap<>(16, 0.75f);
    
  3. 使用不可变集合(线程安全)

    List<String> list = Collections.unmodifiableList(new ArrayList<>());
    
  4. 优先使用Java 8新方法

    • forEach()
    • removeIf()
    • computeIfAbsent()
    • merge()
  5. 考虑并行流处理大数据集

    bigList.parallelStream().filter(...).collect(...);
    

Java 8的集合框架通过这些新特性,使集合操作更加简洁、高效和功能强大。

相关文章:

java集合详细讲解

Java 8 集合框架详解 Java集合框架是Java中最重要、最常用的API之一&#xff0c;Java 8对其进行了多项增强。下面我将全面讲解Java 8中的集合框架。 一、集合框架概述 Java集合框架主要分为两大类&#xff1a; Collection - 单列集合 List&#xff1a;有序可重复Set&#xf…...

嵌入式学习笔记 - STM32 U(S)ART 模块HAL 库函数总结

一 串口发送方式&#xff1a; ①轮训方式发送&#xff0c;也就是主动发送&#xff0c;这个容易理解&#xff0c;使用如下函数&#xff1a; HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout); ②中断方式发送&#xff…...

【VLNs篇】04:SayNav-为新环境中的动态规划到导航进行大型语言模型的基础构建

栏目内容论文标题SayNav: 为新环境中的动态规划到导航进行大型语言模型的基础构建 (SayNav: Grounding Large Language Models for Dynamic Planning to Navigation in New Environments)研究问题自主代理在未知环境中执行复杂导航任务&#xff08;如MultiON&#xff09;时&…...

MySQL中添加一个具有创建数据库权限的用户

要在MySQL中添加一个具有创建数据库权限的用户&#xff0c;可按以下步骤操作&#xff1a; 1. 登录MySQL 使用拥有足够权限&#xff08;一般是root用户 &#xff09;的账号登录到MySQL数据库。在命令行输入&#xff1a; mysql -u root -p然后输入对应的密码&#xff0c;即可进…...

oracle使用SPM控制执行计划

一 SPM介绍 Oracle在11G中推出了SPM&#xff08;SQL Plan management&#xff09;,SPM是一种主动的稳定执行计划的手段&#xff0c;能够保证只有被验证过的执行计划才会被启用&#xff0c;当由于种种原因&#xff08;比如统计信息的变更&#xff09;而导致目标SQL产生了新的执…...

[Java实战]Spring Boot整合Seata:分布式事务一致性解决方案(三十一)

[Java实战]Spring Boot整合Seata&#xff1a;分布式事务一致性解决方案&#xff08;三十一&#xff09; 引言 在微服务架构中&#xff0c;业务逻辑被拆分为多个独立的服务&#xff0c;每个服务可能拥有独立的数据库。当需要跨服务操作多个数据库时&#xff0c;如何保证数据的…...

Openwrt下使用ffmpeg配合自建RTSP服务器实现推流

目前在Openwrt下时mjpg_streamer实现UVC摄像头转网络摄像头的方案很多&#xff0c;这种方案视频服在路由模组中&#xff0c;在局域网中使用很方便。但是对于需要远程监控管理的情况&#xff0c;mjpg_streamer不适应&#xff0c;因为不在局域网中的播放器无法访问到路由模组中的…...

MySQL 索引的增删改查

MySQL 索引的增删改查 1 建表时创建索引 [UNIQUE|FULLTEXT|SPATIAL] INDEX|KEY [别名] (字段名 [(长度)] [ASC|DESC] )主键直接写&#xff1a; PRIMARY KEY (Id)例如&#xff1a; CREATE TABLE people (id int NOT NULL PRIMARY KEY AUTO_INCREMENT,last_name varchar(10)…...

MySQL Host 被封锁解决方案(全版本适用 + Java 后端优化)

引言 MySQL 中 “Host is blocked because of many connection errors” 是生产环境常见问题&#xff0c;若处理不当会导致服务中断。本文结合 MySQL 官方文档&#xff08;5.5/8.0&#xff09;、Java 后端最佳实践及企业级经验&#xff0c;提供从 “快速解封” 到 “根源优化”…...

wifi 如果检查失败,UI 就会出现延迟或缺失打勾的现象。

问题&#xff1a;connectedSsid 的初始化依赖 onCreate 中的状态检查&#xff0c;如果检查失败&#xff0c;UI 就会出现延迟或缺失打勾的现象。 WIFI界面上上的一个标识代表成功连接。重启后出现偶尔不打勾的情况。 原始代码&#xff1a; // if (connectedSsid !…...

点云(point cloud):自动驾驶的“三维扫描图“

点云&#xff08;Point Cloud&#xff09;&#xff1a;就是用很多“点”来表示一个物体或场景的三维形状和结构。&#xff08;用点描绘的3D画&#xff0c;好比素描&#xff0c;但不是用线条勾勒&#xff0c;而是“点点点点”拼出物体形状&#xff09; 观察这幅图像&#xff0c;…...

Redis 中如何保证缓存与数据库的数据一致性?

在 Redis 中保证缓存与数据库的数据一致性是一个关键问题&#xff0c;尤其是在高并发环境下。由于缓存和数据库是两个独立的数据存储系统&#xff0c;它们之间的数据同步存在延迟和不确定性&#xff0c;因此需要采取一系列策略来保证数据的一致性。以下是几种常用的方法和策略&…...

Oracle RAC节点时间差异同步测试

前言&#xff1a; Oracle Real Application Clusters (RAC) 集群依赖于各节点间的心跳检测与缓存融合等机制&#xff0c;这些机制对节点间的时钟同步性有极高的要求。如果集群内不同节点之间存在显著的时间偏差&#xff0c;可能会导致整个集群运行异常。在较早版本的RAC中&…...

python 打卡DAY27

##注入所需库 import pandas as pd import seaborn as sns import matplotlib.pyplot as plt import random import numpy as np import time import shap # from sklearn.svm import SVC #支持向量机分类器 # # from sklearn.neighbors import KNeighborsClassifier …...

位运算及其算法

计算机中的所有数在内存中都是以二进制形式进行存储的 &#xff0c;位运算就是直接对整数二进制位进行操作&#xff0c;有些时候在程序中使用位运算进行操作&#xff0c;会得到极高的便利性。 有符号整数与无符号整数 我们以int整型为例&#xff0c;每个int占4个字节32个bit位…...

flutter getx路由管理、状态管理、路由守卫中间件、永久储存get_storage

一个简单的路由跳转、状态管理 目录 lib/ ├── main.dart ├── routes/index.dart // 路由表 ├── middlewares/auth_middleware.dart // 登录守卫 ├── pages/ │ ├── home_page.dart │ ├── login_page.dart │ └── profile_page.dart └─…...

贪心算法之跳跃游戏问题

问题背景 本文背景是leetcode的一道经典题目&#xff1a;跳跃游戏&#xff0c;描述如下&#xff1a; 给定一个非负整数数组 nums&#xff0c;初始位于数组的第一个位置&#xff08;下标0&#xff09;。数组中的每个元素表示在该位置可以跳跃的最大长度。判断是否能够到达最后…...

Dockers Compose常用指令介绍

Dockers Compose常用指令 1、常用指令介绍 1.1、version 指令 顶级一级指令&#xff0c;指定 compose 指定文件格式版本 version: "3.8" services: 不同版本支持的功能不同。常用版本有 ‘2’, ‘3’, ‘3.8’ 等。 1.2、services 指令 顶级一级指令&#xff0…...

YOLOv11 性能评估与横向对比

在第二章中&#xff0c;我们深入剖析了 YOLOv11 的核心技术&#xff0c;从骨干网络、颈部网络到头部&#xff0c;再到损失函数、数据增强和训练策略的创新&#xff0c;揭示了其高性能背后的奥秘。然而&#xff0c;理论的强大最终需要通过严谨的实验数据来验证。本章将详细阐述 …...

kafka在线增加分区副本数

1、问题来源 线上有一个物联网项目依赖kafka集群中指定主题消费&#xff0c;前些天kafka集群中的某一台机器出现了故障&#xff0c;导致kafka这个主题的数据一直无法消费&#xff0c;经查发现为了保证消息的顺序性此主题仅设置了一个分区&#xff0c;但是副本也仅有一个&#…...

Unity 如何使用Timeline预览、播放特效

在使用unity制作和拟合动画时&#xff0c;我们常用到Timeline&#xff0c;前后拖动滑轨&#xff0c;预览动画正放倒放非常方便。如果我们想对特效也进行这个操作&#xff0c;可以使用下文的步骤。 至此&#xff0c;恭喜你又解锁了一个新的技巧。如果我的分享对你有帮助&#xf…...

GIM发布新版本了 (附rust CLI制作brew bottle流程)

GIM 发布新版本了&#xff01;现在1.3.0版本可用了 可以通过brew upgrade git-intelligence-message升级。 初次安装需要先执行 brew tap davelet/gim GIM 是一个根据git仓库内文件变更自动生成git提交消息的命令行工具&#xff0c;参考前文《GIM: 根据代码变更自动生成git提交…...

GitHub 趋势日报 (2025年05月21日)

本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日整体趋势 Top 10 排名项目名称项目描述今日获星总星数语言1microsoft/WSLLinux的Windows子系统⭐ 1731⭐ 25184C2virattt/ai-hedge-fundA…...

MySQL篇-其他面试题

MySQL事务 问题&#xff1a;事务是什么&#xff1f;ACID问题 事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败。 1、事务…...

iOS 蓝牙开发中的 BT 与 BLE

在 iOS 开发者的语境里&#xff0c;大家把 BT 和 BLE 当成两种不同的蓝牙技术在谈——它们来自同一个 Bluetooth 规范&#xff0c;但面向的场景、协议栈乃至 Apple 提供的 API 都截然不同。 缩写全称 / 技术名称规范层叫法iOS 支持现状典型用途BTBluetooth Classic&#xff08…...

Git的工作区,暂存区,本地仓库

Git 核心概念解析 1. 工作区&#xff08;Working Directory&#xff09; - 日常操作代码的目录&#xff0c;包含项目所有文件和子目录 - 开发者直接编辑和修改文件的位置 - 实际可见的项目文件结构 2. 暂存区&#xff08;Staging Area&#xff09; - 临时保存修改记录的缓冲区…...

鸿蒙Flutter实战:21-混合开发详解-1-概述

引言 在前面的系列文章中&#xff0c;我们从搭建开发环境开始&#xff0c;讲到如何使用、集成第三方插件&#xff0c;如何将现有项目进行鸿蒙化改造&#xff0c;以及上架审核等内容&#xff1b;还以高德地图的 HarmonyOS SDK 的使用为例&#xff0c; 讲解了如何将高德地图集成…...

MySQL错误1419(HY000)解决方案:SUPER权限缺失与二进制日志启用冲突的3种处理方式

一、错误背景与原因分析 错误描述 在执行存储过程、函数或触发器时,MySQL可能抛出以下错误: ERROR 1419 (HY000): You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)…...

[架构之美]从PDMan一键生成数据库设计文档:Word导出全流程详解(二十)

[架构之美]从PDMan一键生成数据库设计文档&#xff1a;Word导出全流程详解&#xff08;二十&#xff09; 一、痛点 你是否经历过这些场景&#xff1f; 数据库字段频繁变更&#xff0c;维护文档耗时费力用Excel维护表结构&#xff0c;版本混乱难以追溯手动编写Word文档&#…...

大量程粗糙度轮廓仪适用于哪些材质和表面?

大量程粗糙度轮廓仪是一种能够在广泛的测量范围内对工件表面进行粗糙度分析的精密仪器。它通常采用接触式或非接触式传感器&#xff0c;通过对工件表面的扫描&#xff0c;捕捉表面微观的起伏和波动&#xff0c;从而获取粗糙度数据。该仪器不仅能测量微小的表面细节&#xff0c;…...