Java使用Collections集合工具类

news2025/5/23 13:15:38

1、Collections 集合工具类

Java 中的 Collections 是一个非常有用的工具类,它提供了许多静态方法来操作或返回集合。这个类位于 java.util 包中,主要包含对集合进行操作的方法,比如排序、搜索、线程安全化等。

Java集合工具类的使用:

《Java使用Collections集合工具类》

《Java使用CollectionUtils集合工具类》

Java中 的 Collections 工具类提供了丰富的静态方法来操作集合,主要功能可分为以下几类:

方法说明
一、排序操作
sort(List<T> list)对 List 进行自然排序(元素需实现 Comparable 接口)。
sort(List<T> list, Comparator<? super T> c)使用自定义比较器排序
reverse(List<?> list)反转 List 元素顺序。
shuffle(List<?> list)随机打乱 List 元素顺序。
swap(List<?> list, int i, int j)交换指定位置元素。
二、查找与统计
max(Collection<? extends T> coll)返回集合最大值。
min(Collection<? extends T> coll)返回集合最小值。
frequency(Collection<?> c, Object o)统计元素出现次数。
binarySearch(List<? extends Comparable<? super T>> list, T key)二分查找已排序列表。
三、新增与修改
addAll(Collection<? super T> c, T... elements)批量添加元素。
replaceAll(List<T> list, T oldVal, T newVal)替换所有匹配元素。
fill(List<? super T> list, T obj)用指定元素填充列表。
copy(List<? super T> dest, List<? extends T> src)列表复制。
四、不可变集合
unmodifiableCollection(Collection<? extends T> c)返回不可修改集合视图。
unmodifiableList(List<? extends T> list)返回不可修改 List 视图。
unmodifiableSet(Set<? extends T> s)返回不可修改 Set 视图。
unmodifiableMap(Map<? extends K,? extends V> m)返回不可修改 Map 视图。
五、同步控制
synchronizedCollection(Collection<T> c)返回线程安全集合。
synchronizedList(List<T> list)返回线程安全 List。
synchronizedSet(Set<T> s)返回线程安全 Set。
synchronizedMap(Map<K,V> m)返回线程安全 Map。
六、特殊集合
emptyList()、emptySet()、emptyMap()返回空集合不可变实例。
singletonList(T o)、singletonSet(T o)、singletonMap(K k, V v)返回单元素不可变集合。
nCopies(int n, T o)返回包含 n 个相同元素的不可变 List。
checkedCollection(Collection<E> c, Class<E> type)返回类型安全集合视图。
七、其他方法
disjoint(Collection<?> c1, Collection<?> c2)判断两集合是否无交集。
indexOfSubList(List<?> source, List<?> target)返回子列表首次出现位置。
lastIndexOfSubList(List<?> source, List<?> target)返回子列表最后出现位置。
rotate(List<?> list, int distance)旋转列表元素。

2、 Collections 方法的使用

Collections 类的方法都是静态的,使用时直接通过类名调用,如 Collections.max(list)。这些方法大大简化了集合操作,特别是对 List 的常见处理。 

【示例】使用 Collections 工具类提供的方法,模拟抽奖活动。

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 抽奖活动
 * @author pan_junbiao
 **/
public class CollectionsTest
{
    public static void main(String[] args)
    {
        // 创建集合列表(奖池)
        List<Integer> jackpot = new ArrayList<>();

        // 奖池添加数据
        Collections.addAll(jackpot, 25, 100, 5, 60, 888, 90);
        System.out.println("奖池中的金额:" + jackpot);

        // 统计
        Integer maxPrize = Collections.max(jackpot);
        Integer minPrize = Collections.min(jackpot);
        System.out.println("奖池中的最大金额:" + maxPrize);
        System.out.println("奖池中的最小金额:" + minPrize);

        // 随机打乱奖池顺序
        Collections.shuffle(jackpot);
        System.out.println("抽奖结果:" + jackpot);
    }
}

执行结果:

 3、Collections 的排序方法

Collections 类的 sort() 方法、reverse()方法说明:

Collections.sort()方法:自然排序‌:对 List 集合中的元素进行升序排列,要求元素必须实现 Comparable 接口(如String、Integer等已默认实现)。

Collections.reverse()方法:反转 List 集合中元素的顺序,不依赖元素是否可比较。

Collections 类提供了两种 sort() 排序方法,分别如下:

(1)sort() 排序方法一:

public static <T extends Comparable<? super T>> void sort(List<T> list) 
{
    list.sort(null);
}

(2)sort() 排序方法二:

public static <T> void sort(List<T> list, Comparator<? super T> c) {
    list.sort(c);
}

该方法中指定比较方式 Comparator<? super T> c,即 c 必须实现 Comparator<? super T> 接口,重写 compareTo() 方法指定比较项目。比较项目在类外指定,比较灵活。

【示例】使用 Collections 类的 sort() 方法、reverse()方法,实现对 List 列表进行排序与倒序。

/**
 * 使用 Collections 类的 sort() 方法、reverse()方法,
 * 实现对 List 列表进行排序与倒序。
 * @author pan_junbiao
 */
@Test
public void testCollectionsSort()
{
    //创建列表(故意打乱顺序)
    List<String> userList = new ArrayList<>();
    userList.add("pan_junbiao的博客_03");
    userList.add("pan_junbiao的博客_01");
    userList.add("pan_junbiao的博客_04");
    userList.add("pan_junbiao的博客_02");
 
    //执行排序方法(正序排序)
    Collections.sort(userList);
    System.out.println("正序排序:");
    userList.stream().forEach(System.out::println);
 
    //执行排序方法(倒序排序)
    Collections.reverse(userList);
    System.out.println("\n倒序排序:");
    userList.stream().forEach(System.out::println);
}

执行结果:

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

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

相关文章

python打卡day33

知识点回顾&#xff1a; PyTorch和cuda的安装查看显卡信息的命令行命令&#xff08;cmd中使用&#xff09;cuda的检查简单神经网络的流程 数据预处理&#xff08;归一化、转换成张量&#xff09;模型的定义 继承nn.Module类定义每一个层定义前向传播流程 定义损失函数和优化器定…

同城上门预约服务系统案例分享,上门服务到家系统都有什么功能?这个功能,很重要!

你以为上门按摩这类平台只要做好接单派单就万事大吉了&#xff1f;大错特错&#xff01;市面上90%的系统只会吹嘘基础功能&#xff0c;却对最关键的财税问题避而不谈。很多创业者直到被税务稽查才发现&#xff0c;自己每年都在白白多交几倍的冤枉税&#xff01;举个例子&#x…

用 UniApp 开发 TilePuzzle:一个由 CodeBuddy 主动驱动的拼图小游戏

我正在参加CodeBuddy「首席试玩官」内容创作大赛&#xff0c;本文所使用的 CodeBuddy 免费下载链接&#xff1a;腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 起心动念&#xff1a;从一个小游戏想法开始 最近在使用 UniApp 做练手项目的时候&#xff0c;我萌生了一个小小…

HJ101 输入整型数组和排序标识【牛客网】

文章目录 零、原题链接一、题目描述二、测试用例三、解题思路四、参考代码 零、原题链接 HJ101 输入整型数组和排序标识 一、题目描述 二、测试用例 三、解题思路 基本思路&#xff1a;   选择一个排序算法&#xff0c;然后根据标识确定升序还是降序&#xff1b;具体思路&a…

在Linux debian12系统上使用go语言以及excelize库处理excel数据

go-do-excel 一、介绍 myBook.xlsx表中,B列是“全部IP地址“,A列是“分发成功的IP地址“,本脚本采用go语言编写,通过读取myBook.xlsx中B列“全部IP地址“和A列“分发成功的IP地址“数据,计算出“分发失败的IP地址“数据,将其写入到C列。 二、编程语言 本脚本在Linux De…

【Python/Tkinter】实现程序菜单

程序源码&#xff1a; import tkinter as tk from tkinter.colorchooser import askcolordef set_colour():saskcolor(color"red",title"选择背景色")root.config(bgs[1])class Application(tk.Frame):def __init__(self,masterNone):super().__init__(ma…

“轩辕杯“云盾砺剑 CTF挑战赛web方向题解

目录 ezjs 签到 ezssrf1.0 ezflask ezrce ezsql1.0 ezweb ezjs 看到这个&#xff0c;直接访问getflag.php&#xff0c;POS提交score 100000000000 签到 6个小模块&#xff0c;我直接放bp的结果 1 2 3 4 5 6 ezssrf1.0 ?urlhttp:127.0.1/FFFFF11111AAAAAggggg.php也可…

常用UI自动化测试框架

&#x1f50d; 常用UI自动化测试框架全览&#xff08;Web / 移动 / 桌面 / AI驱动&#xff09; UI&#xff08;用户界面&#xff09;测试框架是一类用于自动化测试应用图形界面的工具&#xff0c;帮助开发者和测试人员验证界面元素的功能性、交互性和视觉一致性。本文系统梳理了…

已经 上线 Vue 项目 国际化 i18n 中译英

省流说明:本文不是把项目中译英,只是抽取js、vue文件里的中文到JSON文件中,en.json里的value还是需要自己翻译成英文 ### 安装 `npm install vve-i18n-cli -D` ### package.json 里添加脚本命令,简化命令使用 ```json { "scripts": { "i18n": …

RISC-V 开发板 MUSE Pi Pro Gstreamer 编码UVC及MIPI CSI摄像头视频流

视频讲解&#xff1a; RISC-V 开发板 MUSE Pi Pro Gstreamer 编码UVC及MIPI CSI摄像头视频流 Gstreamer 在视频编码、解码、保存等场景下非常常用&#xff0c;其基于插件化的架构&#xff0c;可以玩的很花&#xff0c;进迭时空的Spacemit GStreamer 支持 spacemitdec 专有插件&…

【RA-Eco-RA2L1-48PIN】ADC 电压表

【RA-Eco-RA2L1-48PIN】ADC 电压表 本文介绍了 RA-Eco-RA2L1-48PIN 开发板通过瑞萨 e2 Studio 灵活软件包&#xff08;FSP&#xff09;编程实现 ADC 串口采集电压的项目设计&#xff0c;包括 串口通信、打印字符串、UART 和 ADC 配置、关键代码、ADC 电压转换、电压值串口打印…

KS107BG型超声体模的结构及性能

KS107BG型超声体模适用于工作频率在5~10MHz之间的&#xff22;超设备的性能检测。 一、外部结构 体模外壳和底座由有机玻璃加工组装而成&#xff0c;底面板上开有两个直径36mm的圆孔&#xff0c;其上封有2mm厚的真空橡皮&#xff0c;作为抽气及注射保养液的入口。体模外壳外表…

目标检测评估指标mAP详解:原理与代码

目标检测评估指标mAP详解&#xff1a;原理与代码 目标检测评估指标mAP详解&#xff1a;原理与代码一、前言&#xff1a;为什么需要mAP&#xff1f;二、核心概念解析2.1 PR曲线&#xff08;Precision-Recall Curve&#xff09;2.2 AP计算原理 三、代码实现详解3.1 核心函数ap_pe…

【风控】模型算法区分度指标KS

一、KS指标的定义原理 背景 KS&#xff08;Kolmogorov–Smirnov&#xff09;原本用于检验样本分布与理论分布或两个样本分布是否一致。风控建模中&#xff0c;将“好样本”&#xff08;Good&#xff09;与“坏样本”&#xff08;Bad&#xff09;的模型输出概率看作两组经验分布…

win11下jenkins+docker+maven自动部署springboot项目

win11下jenkinsdockermaven自动部署springboot项目 一、前置软件安装二、jenkins配置三、springboot项目准备四、jenkins打包部署项目到本地docker中五、jenkins打包部署项目到远程服务器docker中 一、前置软件安装 docker安装 需要开启wsl&#xff0c;以管理员身份运行docke…

《决策科学与艺术》No1: 决策树:概念、原理、发展历史、特点及应用

决策树&#xff1a;概念、原理、发展历史、特点及应用 摘要 决策树是一种广泛使用的机器学习和决策分析方法&#xff0c;以其可解释性、简洁性和多功能性著称。本文全面介绍了决策树的概念基础、基本原理、发展历程、显著特征及其在商业、医疗、金融和工程等多个领域的典型应用…

【苍穹外卖】Day01—Mac前端环境搭建

目录 一、安装Nginx &#xff08;一&#xff09;安装Homebrew &#xff08;二&#xff09;Homebrew安装Nginx 1. 执行安装命令&#xff1a; 2. 验证安装&#xff1a; &#xff08;三&#xff09;启动与停止Nginx 二、配置Nginx 1. 替换nginx.conf 2. 替换html文件夹 三…

软考中级软件设计师——设计模式篇

一、设计模式核心分类 设计模式分为 3 大类&#xff0c;共 23 种模式&#xff08;考试常考约 10-15 种&#xff09;&#xff1a; 分类核心模式考试重点创建型模式工厂方法、抽象工厂、单例、生成器、原型单例模式的实现&#xff08;懒汉、饿汉&#xff09;、工厂模式的应用场…

Axure系统原型设计列表版方案

列表页面是众多系统的核心组成部分&#xff0c;承担着数据呈现与基础交互的重要任务。一个优秀的列表版设计&#xff0c;能够极大提升用户获取信息的效率&#xff0c;优化操作体验。下面&#xff0c;我们将结合一系列精心设计的列表版方案图片&#xff0c;深入探讨如何打造出实…

微软全新开源命令行文本编辑器:Edit — 致敬经典,拥抱现代

名人说:博观而约取,厚积而薄发。——苏轼《稼说送张琥》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、引言:命令行的新利器二、Edit:致敬经典,拥抱现代1. 命令行的“新升级”2. 为什么要有 Edit?三、核心功能与特性一览1. 完全开源、MIT 许可证…