Java Collections 类中常用方法使用

一、Collections类

     java.util.Collections 类是 Java 集合框架中的一个工具类,提供了一系列静态方法来操作和处理各种类型的集合。这些方法简化了对集合进行排序、查找、同步控制、创建只读集合等常见操作的过程。

二、常用方法

方法类别方法签名功能需求/约束算法/返回值
排序sort(List<T> list)对列表元素按自然顺序升序排序元素必须实现 Comparable 接口归并排序或 TimSort
sort(List<T> list, Comparator<? super T> c)按自定义比较器排序需提供 Comparator 对象同上
查找binarySearch(List<? extends Comparable<? super T>> list, T key)二分查找元素列表必须已按自然顺序排序找到返回索引;未找到返回 -(插入点) - 1
binarySearch(List<? extends T> list, T key, Comparator<? super T> c)使用自定义比较器二分查找列表必须按比较器规则排序同上
最大值/最小值max(Collection<? extends T> coll)返回集合中的最大元素元素实现 Comparable 接口-
min(Collection<? extends T> coll)返回集合中的最小元素同上-
max(Collection<? extends T> coll, Comparator<? super T> comp)使用比较器返回最大元素需提供 Comparator-
min(Collection<? extends T> coll, Comparator<? super T> comp)使用比较器返回最小元素同上-
反转reverse(List<?> list)反转列表元素顺序--
随机排序shuffle(List<?> list)随机打乱列表顺序-默认使用 Random 类
shuffle(List<?> list, Random rnd)使用指定随机源打乱顺序需提供 Random 对象-
填充fill(List<? super T> list, T obj)用指定对象填充列表所有元素目标列表长度不变-
复制copy(List<? super T> dest, List<? extends T> src)将源列表元素复制到目标列表目标列表长度 ≥ 源列表长度直接覆盖目标列表元素
交换swap(List<?> list, int i, int j)交换列表中两个索引位置的元素i 和 j 必须在列表有效范围内-

三、综合应用

1、操作学生信息如下:

  1. 创建学生列表
  2. 添加学生
  3. 打印原始学生列表
  4. 对学生列表进行排序(按年龄升序)
  5. 查找年龄最大的学生
  6. 查找年龄最小的学生
  7. 反转学生列表
  8. 替换年龄最小的学生的信息
  9. 填充学生列表
  10. 复制学生列表
  11. 交换两个学生的位置
  12. 旋转学生列表
  13. 随机打乱学生列表
  14. 使用二分查找查找特定学生(按年龄排序后,但示例中查找的年龄与注释不匹配)

2、编码

   Student类

public class Student {private String id;private String name;private int age;public Student(String id, String name, int age) {this.id = id;this.name = name;this.age = age;}// Getters 和 Setterspublic String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student{id='" + id + "', name='" + name + "', age=" + age + "}";}}
StudentManager类
public class StudentManager {public static void main(String[] args) {// 创建学生列表List<Student> students = new ArrayList<>();// 添加学生students.add(new Student("001", "Alice", 22));students.add(new Student("002", "Bob", 25));students.add(new Student("003", "Charlie", 23));students.add(new Student("004", "Diana", 21));// 打印原始学生列表System.out.println("原始数据:");for (Student student : students) {System.out.println(student);}// 对学生列表进行排序(按年龄升序)Collections.sort(students, Comparator.comparing(Student::getAge));System.out.println("\n按年龄升序:");for (Student student : students) {System.out.println(student);}// 查找年龄最大的学生Student oldestStudent = Collections.max(students, Comparator.comparing(Student::getAge));System.out.println("\n年龄最大的学生:");System.out.println(oldestStudent);// 查找年龄最小的学生Student youngestStudent = Collections.min(students, Comparator.comparing(Student::getAge));System.out.println("\n年龄最小的学生:");System.out.println(youngestStudent);// 反转学生列表Collections.reverse(students);System.out.println("\n反转:");for (Student student : students) {System.out.println(student);}// 替换年龄最小的学生的信息(例如,替换为另一个学生)Collections.replaceAll(students, youngestStudent, new Student("005", "Eve", 20));System.out.println("\n替换:");for (Student student : students) {System.out.println(student);}// 填充学生列表(用特定学生填充)Collections.fill(students, new Student("006", "Fiona", 24));System.out.println("\n填充:");for (Student student : students) {System.out.println(student);}// 复制学生列表List<Student> copiedStudents = new ArrayList<>(students);Collections.copy(copiedStudents, students);System.out.println("\n复制:");for (Student student : copiedStudents) {System.out.println(student);}// 交换两个学生的位置,例如,将第一个和最后一个学生交换位置Collections.swap(students, 0, students.size() - 1);System.out.println("\n交换:");for (Student student : students) {System.out.println(student);}// 旋转学生列表,例如,将列表向右旋转2个位置Collections.rotate(students, 2);System.out.println("\n旋转:");for (Student student : students) {System.out.println(student);}// 随机打乱学生列表Collections.shuffle(students);System.out.println("\n随机打乱:");for (Student student : students) {System.out.println(student);}// 使用二分查找查找特定学生(按年龄排序后)
//        Student targetStudent = new Student("000", "Non-existent", 21); // 假设要查找年龄为21的学生Student targetStudent = new Student("000", "Non-existent", 27); // 假设要查找年龄为27的学生int index = Collections.binarySearch(students, targetStudent, Comparator.comparing(Student::getAge));if (index >= 0) {System.out.println("\n年龄是21的学生索引: " + index);System.out.println(students.get(index));} else {System.out.println("\n没有找到年龄是21的学生索引: " + (-index - 1));}}
}

3、效果

 

四、总结

      Collections 类提供的方法大大简化了对集合的操作,通过合理的选择和使用这些方法,可以高效地实现各种集合处理逻辑。需要注意的是,某些方法(如排序和二分查找)对集合的状态(如排序状态)有要求,使用时需要确保满足这些要求,以避免异常或错误的结果。

 

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

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

相关文章

Linux网络编程——数据链路层详解,以太网、MAC地址、MTU、ARP、DNS、NAT、代理服务器......

目录 一、前言 二、以太网 二、以太网帧格式 三、 MAC地址 四、MTU 1、数据链路层的数据分片 2、MTU对UDP协议的影响 3、MTU对TCP协议的影响 五、ARP协议 1、什么是ARP 2、ARP的作用 3、ARP协议的工作流程 4、ARP缓存表 5、ARP请求报文 6、中间人 六、DNS&…

轻量级开源文件共享系统PicoShare本地部署并实现公网环境文件共享

&#xfeff;## 前言 本篇文章介绍&#xff0c;如何在 Linux 系统本地部署轻量级文件共享系统 PicoShare&#xff0c;并结合 Cpolar 内网穿透实现公网环境远程传输文件至本地局域网内文件共享系统。 PicoShare 是一个由 Go 开发的轻量级开源共享文件系统&#xff0c;它没有文…

基于查表法的 CRC8 / CRC16 / CRC32校验解析

在嵌入式开发中&#xff0c;CRC&#xff08;Cyclic Redundancy Check&#xff09;循环冗余校验算法广泛应用于通信数据校验、Flash 数据完整性检测、Bootloader 升级验证等场景。本文将深入剖析一套完整的 CRC8、CRC16 和 CRC32 实现&#xff0c;并通过查表法&#xff08;Table…

二战蓝桥杯所感

&#x1f334; 前言 今天是2025年4月12日&#xff0c;第十六届蓝桥杯结束&#xff0c;作为二战的老手&#xff0c;心中还是颇有不甘的。一方面&#xff0c;今年的题目比去年简单很多&#xff0c;另一方面我感觉并没有把能拿的分都拿到手&#xff0c;这是我觉得最遗憾的地方。不…

基于ueditor编辑器的功能开发之给编辑器图片增加水印功能

用户需求&#xff0c;双击编辑器中的图片的时候&#xff0c;出现弹框&#xff0c;用户可以选择水印缩放倍数、距离以及水印所放置的方位&#xff08;当然有很多水印插件&#xff0c;位置大小透明度用户都能够自定义&#xff0c;但是用户需求如此&#xff0c;就自己写了&#xf…

算法题(123):回文日期

审题&#xff1a; 本题需要我们判断以八位数确定的日期范围中是否存在回文数 思路&#xff1a; 方法一&#xff1a;枚举法 1.确定枚举对象&#xff1a; 对象1&#xff1a;八位数日期&#xff0c;所需枚举次数&#xff1a;10^8 对象2&#xff1a;年&#xff0c;所需枚举次数&…

数据库表的操作

一、数据库的搭建 如上篇文章 二、基础了解 show命令支持模糊匹配 show databases、show tables、 show databases like “” “%”、“_”通配符字符串 三、MySQL数据库表的操作 关系型数据库都是遵循SQL语法进行数据查询和管理的 3.1 SQL介绍 3.1.1 SQL的功能 结构化查询语…

在 Lua 中实现 JSON 与 Table 的相互转换的详细使用方法

在 Lua 中实现 JSON 与 Table 的相互转换是常见的数据序列化需求。以下是详细的实现方案、性能优化技巧及进阶用法&#xff1a; 在 Lua 中实现 JSON 与 Table 的相互转换的详细使用方法-目录 一、常用 JSON 库对比二、基础转换实现1. 使用 lua-cjson&#xff08;高性能 C 库&am…

dbVisitor 规则怎么用?

在数据库操作中&#xff0c;dbVisitor 是一个功能强大的工具&#xff0c;其规则的使用大大简化了 SQL 语句的编写过程。下面将详细介绍 dbVisitor 规则的使用方法并附上具体例子。 一、规则的基本调用 在 dbVisitor 中&#xff0c;SQL 语句可以通过 {...} 的形式来调用规则&a…

Kingbase 常用运维命令总结

一、数据库连接与基础操作 连接指定服务器数据库 ksql -h 主机IP -p 端口号 -U 用户名 -d 数据库名 -W # 示例&#xff1a;连接 IP 为 192.168.1.100 的数据库 ksql -h 192.168.1.100 -p 54321 -U system -d test -W 断开数据库连接 \q 或 exit 查看数据库列表及详细信息…

【数据结构与算法】LRU Cache 算法实现

文章目录 Ⅰ. 什么是 LRU CacheⅡ. LRU Cache 的实现[146. LRU 缓存](https://leetcode.cn/problems/lru-cache/) Ⅰ. 什么是 LRU Cache ​ LRU&#xff08; Least Recently Used&#xff09; 是一种淘汰策略的缩写&#xff0c;意思是 最近最少使用&#xff0c;它是一种 Cache…

网页布局汇总

1. 盒模型 容器大小 内容大小 内边距(padding) 边框大小 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">&l…

打造海外流量矩阵,TikTok云控工具让获客更简单!

跨境获客&#xff0c;始终是无数企业主心中的一道难题。今天&#xff0c;给大家带来一款强大实用的工具——TikTok矩阵云控系统&#xff0c;帮你轻松突破流量瓶颈&#xff0c;实现高效跨境获客&#xff01; 跨国远程操控——苹果手机矩阵云控系统 在正式开始之前&#xff0c;…

MyBatis-plus 快速入门

提示&#xff1a;MyBatis-Plus&#xff08;MP&#xff09;是一个 MyBatis的增强版 文章目录 前言使用MybatisPlus的基本步骤1、引入MybatisPlus依赖代替Mybatis依赖2、定义Mapper接口并继承BaseMapper他是怎么知道哪张表&#xff0c;哪些字段呢 3、实体类注解4、根据需要添加配…

找搭子系统 搭子经济新风口 基于精准匹配的社交新生态探索

一、市场前景&#xff1a;为什么现在需要"找搭子"&#xff1f; 孤独经济爆发 超60%年轻人存在"精准陪伴"需求&#xff08;2024社交报告&#xff09; 传统社交App无法满足"非婚恋、非熟人"的中间态需求 线下活动复苏 剧本杀/飞盘等兴趣活动年增…

深入探析C#设计模式:访问者模式(Visitor Pattern)的原理与应用

引言 在软件开发中&#xff0c;设计模式为我们提供了高效、可维护的解决方案。而在众多设计模式中&#xff0c;访问者模式&#xff08;Visitor Pattern&#xff09;以其独特的结构和应用场景&#xff0c;在复杂系统中发挥着重要作用。本文将深入讲解访问者模式的定义、原理、优…

Redis核心功能实现

前言 学习是个输入的过程&#xff0c;在进行输入之后再进行一些输出&#xff0c;比如写写文章&#xff0c;笔记&#xff0c;或者做一些技术串讲&#xff0c;虽然需要花费不少时间&#xff0c;但是好处很多&#xff0c;首先是能通过输出给自己的输入带来一些动力&#xff0c;然…

RPA VS AI Agent

图片来源网络 RPA&#xff08;机器人流程自动化&#xff09;和AI Agent&#xff08;人工智能代理&#xff09;在自动化和智能化领域各自扮演着重要角色&#xff0c;但它们之间存在显著的区别。以下是对两者区别的详细分析&#xff1a; 一、定义与核心功能 RPA&#xff08;机…

多模态大语言模型arxiv论文略读(十五)

Jailbreaking GPT-4V via Self-Adversarial Attacks with System Prompts ➡️ 论文标题&#xff1a;Jailbreaking GPT-4V via Self-Adversarial Attacks with System Prompts ➡️ 论文作者&#xff1a;Yuanwei Wu, Xiang Li, Yixin Liu, Pan Zhou, Lichao Sun ➡️ 研究机构…

第1节:计算机视觉发展简史

计算机视觉与图像分类概述&#xff1a;计算机视觉发展简史 计算机视觉&#xff08;Computer Vision&#xff09;作为人工智能领域的重要分支&#xff0c;是一门研究如何使机器"看"的科学&#xff0c;更具体地说&#xff0c;是指用摄影机和计算机代替人眼对目标进行识…