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

java Collections类介绍

Java 的 java.util.Collections 类提供了一组静态方法,用于操作或返回集合(如列表、集合和映射)。Collections 类是一个实用工具类,旨在为集合提供便捷的算法和操作。以下是对 Collections 类及其常用方法的介绍。

常用方法总结

  • 排序sort(List<T> list)sort(List<T> list, Comparator<? super T> c)
  • 查找binarySearch(List<? extends Comparable<? super T>> list, T key)binarySearch(List<? extends T> list, T key, Comparator<? super T> c)
  • 反转reverse(List<?> list)
  • 旋转rotate(List<?> list, int distance)
  • 填充fill(List<? super T> list, T obj)
  • 复制copy(List<? super T> dest, List<? extends T> src)
  • 最小和最大min(Collection<? extends T> coll)max(Collection<? extends T> coll)
  • 同步集合synchronizedList(List<T> list)synchronizedSet(Set<T> s)synchronizedMap(Map<K, V> m)
  • 不可变集合unmodifiableList(List<? extends T> list)unmodifiableSet(Set<? extends T> s)unmodifiableMap(Map<? extends K, ? extends V> m)

排序
  • sort(List<T> list):对列表进行升序排序,列表中的元素必须实现 Comparable 接口。
List<Integer> numbers = Arrays.asList(5, 3, 1, 4, 2);
Collections.sort(numbers); // 排序后,numbers为 [1, 2, 3, 4, 5]
  • sort(List<T> list, Comparator<? super T> c):根据指定的比较器对列表进行排序。
List<String> names = Arrays.asList("Charlie", "Alice", "Bob");// 根据字符串长度排序
Collections.sort(names, (s1, s2) -> s1.length() - s2.length()); 

注:Collections.sort(names, (s1, s2) -> s1.length() - s2.length()) 中 (s1, s2) -> s1.length() - s2.length() 这是一个 Lambda 表达式,用于实现 Comparator 接口的 compare 方法。

查找
  • binarySearch(List<? extends Comparable<? super T>> list, T key):使用二分搜索法在列表中查找元素,返回索引。列表必须是已排序的。
List<Integer> sortedNumbers = Arrays.asList(1, 2, 3, 4, 5);
int index = Collections.binarySearch(sortedNumbers, 3); // 返回索引 2
  • binarySearch(List<? extends T> list, T key, Comparator<? super T> c):使用二分搜索法在指定比较器的列表中查找元素。
List<String> sortedNames = Arrays.asList("Alice", "Bob", "Charlie");
int index = Collections.binarySearch(sortedNames, "Bob", String::compareTo); // 返回索引 1
最大和最小值
  • max(Collection<? extends T> coll):返回集合中的最大元素。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int max = Collections.max(numbers); // 返回 5
  • min(Collection<? extends T> coll):返回集合中的最小元素。
int min = Collections.min(numbers); // 返回 1
逆序
  • reverse(List<?> list):将列表中的元素反转。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Collections.reverse(numbers); // 反转后,numbers为 [5, 4, 3, 2, 1]
随机化
  • shuffle(List<?> list):对列表进行随机打乱。
Collections.shuffle(numbers); // numbers的元素顺序将被随机打乱
填充
  • fill(List<? super T> list, T obj):用指定元素替换列表中的所有元素。
List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));
Collections.fill(list, "z"); // list 现在是 ["z", "z", "z"]
拷贝
  • copy(List<? super T> dest, List<? extends T> src):将源列表中的所有元素复制到目标列表中。
List<String> dest = Arrays.asList(new String[3]);
List<String> src = Arrays.asList("a", "b", "c");
Collections.copy(dest, src); // dest 现在是 ["a", "b", "c"]
不可变集合
  • unmodifiableList(List<? extends T> list):返回一个不可修改的视图。
List<String> list = Arrays.asList("a", "b", "c");
List<String> unmodifiableList = Collections.unmodifiableList(list);
// unmodifiableList.add("d"); // 会抛出 UnsupportedOperationException
同步集合
  • synchronizedList(List<T> list):返回一个线程安全的列表。
List<String> list = new ArrayList<>();
List<String> syncList = Collections.synchronizedList(list);

示例总结

以下是一个综合示例,展示了 Collections 类的一些常用方法:

import java.util.*;public class CollectionsExample {public static void main(String[] args) {List<Integer> numbers = new ArrayList<>(Arrays.asList(5, 3, 1, 4, 2));// 排序Collections.sort(numbers);System.out.println("排序后: " + numbers);// 反转Collections.reverse(numbers);System.out.println("反转后: " + numbers);// 随机打乱Collections.shuffle(numbers);System.out.println("随机打乱后: " + numbers);// 查找最大和最小值int max = Collections.max(numbers);int min = Collections.min(numbers);System.out.println("最大值: " + max + ", 最小值: " + min);// 二分搜索Collections.sort(numbers);int index = Collections.binarySearch(numbers, 3);System.out.println("元素 3 的索引: " + index);// 同步集合List<String> syncList = Collections.synchronizedList(new ArrayList<>());syncList.add("a");syncList.add("b");System.out.println("同步集合: " + syncList);}
}

通过使用 Collections 类提供的这些方法,可以方便地对集合进行各种操作,提高代码的可读性和维护性。

参考:

Collections (Java SE 17 & JDK 17)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • k8s中使用cert-manager生成自签名证书
  • AI学习指南机器学习篇-层次聚类(Hierarchical Clustering)简介
  • [手机Linux PostmarketOS]三, Alpine Linux命令使用
  • Java rapidocr
  • 政安晨:【Keras机器学习示例演绎】(五十三)—— 使用 TensorFlow 决策森林进行分类
  • Go bytes包
  • 用 Dockerfile 创建镜像的基本步骤有哪些?
  • Kubernetes平台迁移
  • 【Java15】继承
  • java-反射 1
  • C语言7 控制语句
  • CPU pipeline面试题Q3:我们可以任意增加CPU pipeline深度吗?
  • Appium Inspector介绍和使用
  • 探展2024世界人工智能大会之令人惊艳的扫描黑科技~
  • GEE代码实例教程详解:湖泊水位变化监测
  • Brief introduction of how to 'Call, Apply and Bind'
  • Git的一些常用操作
  • HTML5新特性总结
  • java8 Stream Pipelines 浅析
  • js操作时间(持续更新)
  • magento 货币换算
  • PAT A1120
  • Python 反序列化安全问题(二)
  • Python3爬取英雄联盟英雄皮肤大图
  • Python学习笔记 字符串拼接
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 基于遗传算法的优化问题求解
  • 三栏布局总结
  • 我的zsh配置, 2019最新方案
  • 物联网链路协议
  • 学习HTTP相关知识笔记
  • 正则与JS中的正则
  • 阿里云API、SDK和CLI应用实践方案
  • 关于Android全面屏虚拟导航栏的适配总结
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • !!java web学习笔记(一到五)
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • (2022 CVPR) Unbiased Teacher v2
  • (八)Spring源码解析:Spring MVC
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (二)Eureka服务搭建,服务注册,服务发现
  • (附源码)springboot教学评价 毕业设计 641310
  • (过滤器)Filter和(监听器)listener
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .net 获取某一天 在当月是 第几周 函数
  • .NET 中的轻量级线程安全
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .net中应用SQL缓存(实例使用)
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • @private @protected @public
  • @Repository 注解