Collections:专为集合框架而生的工具类

Collections 是 JDK 提供的一个工具类,位于 java.util 包下,提供了一系列的静态方法。

排序操作

  • reverse(List list):反转顺序
  • shuffle(List list):洗牌,将顺序打乱
  • sort(List list):自然升序
  • sort(List list, Comparator c):按照自定义的比较器排序
  • swap(List list, int i, int j):将 i 和 j 位置的元素交换位置
List<String> list = new ArrayList<>();
list.add("沉默王二");
list.add("沉默王三");
list.add("沉默王四");
list.add("沉默王五");
list.add("沉默王六");System.out.println("原始顺序:" + list);// 反转
Collections.reverse(list);
System.out.println("反转后:" + list);// 洗牌
Collections.shuffle(list);
System.out.println("洗牌后:" + list);// 自然升序
Collections.sort(list);
System.out.println("自然升序后:" + list);// 交换
Collections.swap(list, 2,4);
System.out.println("交换后:" + list);

输出:

原始顺序:[沉默王二, 沉默王三, 沉默王四, 沉默王五, 沉默王六]
反转后:[沉默王六, 沉默王五, 沉默王四, 沉默王三, 沉默王二]
洗牌后:[沉默王五, 沉默王二, 沉默王六, 沉默王三, 沉默王四]
自然升序后:[沉默王三, 沉默王二, 沉默王五, 沉默王六, 沉默王四]
交换后:[沉默王三, 沉默王二, 沉默王四, 沉默王六, 沉默王五]

查找操作

  • binarySearch(List list, Object key):二分查找法,前提是 List 已经排序过了
  • max(Collection coll):返回最大元素
  • max(Collection coll, Comparator comp):根据自定义比较器,返回最大元素
  • min(Collection coll):返回最小元素
  • min(Collection coll, Comparator comp):根据自定义比较器,返回最小元素
  • fill(List list, Object obj):使用指定对象填充
  • frequency(Collection c, Object o):返回指定对象出现的次数
System.out.println("最大元素:" + Collections.max(list));
System.out.println("最小元素:" + Collections.min(list));
System.out.println("出现的次数:" + Collections.frequency(list, "沉默王二"));// 没有排序直接调用二分查找,结果是不确定的
System.out.println("排序前的二分查找结果:" + Collections.binarySearch(list, "沉默王二"));
Collections.sort(list);
// 排序后,查找结果和预期一致
System.out.println("排序后的二分查找结果:" + Collections.binarySearch(list, "沉默王二"));Collections.fill(list, "沉默王八");
System.out.println("填充后的结果:" + list);

输出后:

原始顺序:[沉默王二, 沉默王三, 沉默王四, 沉默王五, 沉默王六]
最大元素:沉默王四
最小元素:沉默王三
出现的次数:1
排序前的二分查找结果:0
排序后的二分查找结果:1
填充后的结果:[沉默王八, 沉默王八, 沉默王八, 沉默王八, 沉默王八]

同步控制

Collections 工具类中提供了多个 synchronizedXxx 方法,这些方法会返回一个同步的对象,从而解决多线程中访问集合时的安全问题。

SynchronizedList synchronizedList = Collections.synchronizedList(list);

 在方法里面使用synchronized加了一层锁而已

static class SynchronizedList<E>extends SynchronizedCollection<E>implements List<E> {private static final long serialVersionUID = -7754090372962971524L;final List<E> list;SynchronizedList(List<E> list) {super(list); // 调用父类 SynchronizedCollection 的构造方法,传入 listthis.list = list; // 初始化成员变量 list}// 获取指定索引处的元素public E get(int index) {synchronized (mutex) {return list.get(index);} // 加锁,调用 list 的 get 方法获取元素}// 在指定索引处插入指定元素public void add(int index, E element) {synchronized (mutex) {list.add(index, element);} // 加锁,调用 list 的 add 方法插入元素}// 移除指定索引处的元素public E remove(int index) {synchronized (mutex) {return list.remove(index);} // 加锁,调用 list 的 remove 方法移除元素}
}

不可变集合

  • emptyXxx():制造一个空的不可变集合
  • singletonXxx():制造一个只有一个元素的不可变集合
  • unmodifiableXxx():为指定集合制作一个不可变集合
List emptyList = Collections.emptyList();
emptyList.add("非空");
System.out.println(emptyList);

 这段代码在执行的时候就抛出错误了。

Exception in thread "main" java.lang.UnsupportedOperationExceptionat java.util.AbstractList.add(AbstractList.java:148)at java.util.AbstractList.add(AbstractList.java:108)at com.itwanger.s64.Demo.main(Demo.java:61)

        这是因为 Collections.emptyList() 会返回一个 Collections 的内部类 EmptyList,而 EmptyList 并没有重写父类 AbstractList 的 add(int index, E element) 方法,所以执行的时候就抛出了不支持该操作的 UnsupportedOperationException 了。

其他

  • addAll(Collection<? super T> c, T... elements),往集合中添加元素
  • disjoint(Collection<?> c1, Collection<?> c2),判断两个集合是否没有交集
List<String> allList = new ArrayList<>();
Collections.addAll(allList, "沉默王九","沉默王十","沉默王二");
System.out.println("addAll 后:" + allList);System.out.println("是否没有交集:" + (Collections.disjoint(list, allList) ? "是" : "否"));

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

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

相关文章

信道估计算法

Least Square Criteria 模型 输入导频序列&#xff0c; x ( n ) , n 0 , 1 , ⋯ , N − 1 x(n),n0,1,\cdots,N-1 x(n),n0,1,⋯,N−1 加性噪声序列&#xff1a; ω ( n ) , n 0 , 1 , ⋯ , N − 1 \omega(n), n 0, 1, \cdots, N-1 ω(n),n0,1,⋯,N−1 输出序列&#xff0c;…

ls命令学习记录2

1.用不同的颜色显示内容 ls --color 除了使用-F选项在文件和文件夹名称后面附加特殊的符号&#xff0c;还可以让shell用不同的颜色显示内容&#xff0c;这样就能够用另一种方法把不同的内容进行分类&#xff0c;将它们区分开来。 $ ls --color adblock_filters.txt fixm3u …

用 netsh wlan show profile 命令查看历史连接过的 wifi

netsh wlan show profile 命令是 Windows 命令行工具中 netsh 的一部分&#xff0c;netsh 是一个强大的网络配置工具。wlan 子命令用于管理和显示无线网络配置。通过 netsh wlan show profile 命令&#xff0c;你可以查看存储在系统中的无线网络配置文件。这些配置文件包含了连…

java中遍历数组的三种方式

文章目录 遍历数组的三种方式1.for循环(1)遍历一维数组(2)遍历二维数组 2.foreach遍历(1).遍历一维数组(2).遍历二维数组 3.Arrays里的toString方法(1).遍历一维数组(2).遍历二维数组 遍历数组的三种方式 1.for循环 (1)遍历一维数组 int[] arr {1,3,2,4,5}; for (int i 0;i…

(算法)硬币问题

问题&#xff1a;有1元&#xff0c;5元&#xff0c;10元&#xff0c;50元&#xff0c;100元&#xff0c;500元的硬币各有C1,C5,C10.C50,C100,C500个。 现在要用这些硬币来支付A元&#xff0c;最小需要多少枚硬币&#xff1f; 该题使用递归算法&#xff0c;利用局部最优解来推导…

最小二乘是什么?

最小二乘法&#xff08;Least Squares Method&#xff09;是一种统计方法&#xff0c;用于通过最小化观测数据与模型预测值之间的误差平方和来拟合数据。这种方法广泛应用于回归分析中&#xff0c;尤其是在线性回归模型中。 基本原理 最小二乘法的基本思想是找到模型参数&…

数学建模中的辅助变量、中间变量、指示变量

在数学建模中&#xff0c;除了决策变量外&#xff0c;还有一些其他类型的变量&#xff0c;如中间变量、辅助变量和指示变量。每种变量在模型中都有特定的用途和意义。以下是对这些变量的详细解释&#xff1a; 1. 决策变量&#xff08;Decision Variables&#xff09; 定义&am…

求职笔记day3

运动量3.5万步。五园连通未完成。 未考试&#xff0c;朋友建议按代码随想录的框架先刷对应的知识点。 代码随想录 (programmercarl.com) 704. 二分查找 - 力扣&#xff08;LeetCode&#xff09; 单词倒排_牛客题霸_牛客网 (nowcoder.com)

5Python的Pandas:数据结构

Pandas是基于强大的NumPy库开发的&#xff0c;它继承了NumPy中的一些数据结构&#xff0c;也继承了NumPy的高效计算特性。 1.Python的数据类型 Python 提供了多种数据类型&#xff0c;用于存储和操作不同类型的数据。以下是一些主要的数据类型&#xff1a; 数值类型&#xff…

解答|服务器只能开22端口可以申请IP地址SSL证书吗?

IP地址SSL证书&#xff0c;是一种专门颁发给公网IP地址的SSL证书&#xff0c;而不是常见的基于域名的SSL证书。SSL证书主要用于保障数据在客户端&#xff08;如用户的浏览器&#xff09;和服务器之间传输时的加密性和安全性&#xff0c;以防止数据被截取或篡改。 服务器只能开…

翁恺-C语言程序设计-07-1. 换个格式输出整数

07-1. 换个格式输出整数 让我们用字母B来表示“百”、字母S表示“十”&#xff0c;用“12…n”来表示个位数字n&#xff08;<10&#xff09;&#xff0c;换个格式来输出任一个不超过3位的正整数。例如234应该被输出为BBSSS1234&#xff0c;因为它有2个“百”、3个“十”、以…

2024.7.13刷题记录-牛客小白月赛98(未完)

目录 一、A-骰子魔术_牛客小白月赛98 (nowcoder.com) 1.模拟 2.简洁写法 二、B-最少剩几个&#xff1f;_牛客小白月赛98 (nowcoder.com) 贪心-数学 三、C-两个函数_牛客小白月赛98 (nowcoder.com) 1.模拟 2.逆元 一、A-骰子魔术_牛客小白月赛98 (nowcoder.com) 1.模拟 …

github actions方式拉取docker镜像

参考&#xff1a; https://wkdaily.cpolar.cn/archives/gc 注意github actions提供的免费虚拟机空间有限&#xff0c;空间不足会报错&#xff0c;查看大概语句有10来G 我在workflow file里加了df -h 运行查看磁盘情况&#xff1a; 通过pwd命令&#xff0c;可以知道运行目录/ho…

ETL数据集成丨主流ETL工具(ETLCloud、DataX、Kettle)数据传输性能大PK

目前市面上的ETL工具众多&#xff0c;为了方便广大企业用户在选择ETL工具时有一个更直观性能方面的参考值&#xff0c;我们选取了目前市面上最流行的三款ETL工具&#xff08;ETLCloud、DataX、Kettle&#xff09;来作为本次性能传输的代表&#xff0c;虽然性能测试数据有很多相…

【JavaScript】解决 JavaScript 语言报错:Uncaught TypeError: XYZ is not a function

文章目录 一、背景介绍常见场景 二、报错信息解析三、常见原因分析1. 变量或对象属性类型错误2. 函数名拼写错误或覆盖3. 作用域问题导致的函数未定义4. 调用未初始化的函数 四、解决方案与预防措施1. 确保变量类型正确2. 检查拼写错误3. 注意作用域4. 初始化变量 五、示例代码…

Web组成架构

网站源码&#xff1a;分脚本类型&#xff0c;分应用方向操作系统&#xff1a;windows&#xff0c;linux中间件&#xff08;搭建平台&#xff09;&#xff1a;apche、IIS、tomcat、nginx等数据库&#xff1a;mssql、oracle、sybase、db2、access等 WEB相关安全漏洞 WEB源码类对…

算法训练营day11 栈与队列(栈的应用,单调队列,优先队列)

&#x1f4a1; 解题思路 &#x1f4dd; 确定输入与输出&#x1f50d; 分析复杂度&#x1f528; 复杂题目拆分 &#xff1a;严谨且完整 地拆分为更小的可以解决的子问题&#xff08;栈和队列的功能&#xff0c;栈和队列的变体应用&#xff09;–&#xff08;多总结&#xff09;…

C#中的反射

dll和exe文件的区别 用途&#xff1a; .exe&#xff08;可执行文件&#xff09;&#xff1a;是可以直接运行的程序文件。当你双击一个 .exe 文件或在命令行中输入它的名字&#xff0c;操作系统会加载并执行这个程序。 .dll&#xff08;动态链接库&#xff09;&#xff1a;包含…

graphviz subgraph添加边界框

subgraph name 属性必须要以cluster开头。 A Quick Introduction to GraphvizAn awesome tool for software documentation and visualizing graphshttps://www.worthe-it.co.za/blog/2017-09-19-quick-introduction-to-graphviz.html digraph {rankdir"LR"// the n…

新版k8s拉取镜像失败问题

新版版从k8s从1.23后放弃使用docker容器作为的默认运行时了&#xff0c;而是采用的containerd&#xff0c;使用时不在使用docker拉取镜像&#xff0c;这就带来了一系列的问题。在k8s1.24之后用户可以选择docker或者选择contained作为容器运行时&#xff0c;如果不指定使用的doc…