Collections类操作集合详解

Collections 类是 Java 提供的一个操作 Set、List 和 Map 等集合的工具类。Collections 类提供了许多操作集合的静态方法,借助这些静态方法可以实现集合元素的排序、查找替换和复制等操作。

排序(正向和逆向)

Collections 提供了如下方法用于对 List 集合元素进行排序。

	void reverse(List list):对指定 List 集合元素进行逆向排序。void shuffle(List list):对 List 集合元素进行随机排序(shuffle 方法模拟了“洗牌”动作)。void sort(List list):根据元素的自然顺序对指定 List 集合的元素按升序进行排序。void sort(List list, Comparator c):根据指定 Comparator 产生的顺序对 List 集合元素进行排序。void swap(List list, int i, int j):将指定 List 集合中的 i 处元素和 j 处元素进行交换。void rotate(List list, int distance):当 distance 为正数时,将 list 集合的后 distance 个元素“整体”移到前面;当 distance 为负数时,将 list 集合的前 distance 个元素“整体”移到后面。该方法不会改变集合的长度。

对用户输入的 5 个商品价格进行排序后输出。这里要求使用 Collections 类中 sort() 方法按从低到高的顺序对其进行排序,最后将排序后的成绩输出。

代码如下:

public class Test {public static void main(String[] args) {Scanner input = new Scanner(System.in);List prices = new ArrayList();for (int i = 0; i < 5; i++) {System.out.println("请输入第 " + (i + 1) + " 个商品的价格:");int p = input.nextInt();prices.add(Integer.valueOf(p)); // 将录入的价格保存到List集合中}Collections.sort(prices); // 调用sort()方法对集合进行排序System.out.println("价格从低到高的排列为:");for (int i = 0; i < prices.size(); i++) {System.out.print(prices.get(i) + "\t");}}
}

如上述代码,循环录入 5 个价格,并将每个价格都存储到已定义好的 List 集合 prices 中,然后使用 Collections 类的 sort() 方法对该集合元素进行升序排序。最后使用 for 循环遍历 users 集合,输出该集合中的元素。

该程序的执行结果如下所示。 
请输入第 1 个商品的价格:
98
请输入第 2 个商品的价格:
48
请输入第 3 个商品的价格:
66
请输入第 4 个商品的价格:
80
请输入第 5 个商品的价格:
18
价格从低到高的排列为:
18    48    66    80    98

使用 Collections 类的 reverse() 方法对保存到 List 集合中的 5 个商品名称进行反转排序,并输出排序后的商品信息。代码如下:

public class Test {public static void main(String[] args) {Scanner input = new Scanner(System.in);List students = new ArrayList();System.out.println("******** 商品信息 ********");for (int i = 0; i < 5; i++) {System.out.println("请输入第 " + (i + 1) + " 个商品的名称:");String name = input.next();students.add(name); // 将录入的商品名称存到List集合中}Collections.reverse(students); // 调用reverse()方法对集合元素进行反转排序System.out.println("按录入时间的先后顺序进行降序排列为:");for (int i = 0; i < 5; i++) {System.out.print(students.get(i) + "\t");}}
}

如上述代码,首先循环录入 5 个商品的名称,并将这些名称保存到 List 集合中,然后调用 Collections 类中的 reverse() 方法对该集合元素进行反转排序。最后使用 for 循环将排序后的集合元素输出。

执行该程序,输出结果如下所示。

******** 商品信息 ********
请输入第 1 个商品的名称:
果粒橙
请输入第 2 个商品的名称:
冰红茶
请输入第 3 个商品的名称:
矿泉水
请输入第 4 个商品的名称:
软面包
请输入第 5 个商品的名称:
巧克力
按录入时间的先后顺序进行降序排列为:
巧克力    软面包    矿泉水    冰红茶    果粒橙   

查找、替换操作

Collections 还提供了如下常用的用于查找、替换集合元素的方法。

	int binarySearch(List list, Object key):使用二分搜索法搜索指定的 List 集合,以获得指定对象在 List 集合中的索引。如果要使该方法可以正常工作,则必须保证 List 中的元素已经处于有序状态。Object max(Collection coll):根据元素的自然顺序,返回给定集合中的最大元素。Object max(Collection coll, Comparator comp):根据 Comparator 指定的顺序,返回给定集合中的最大元素。Object min(Collection coll):根据元素的自然顺序,返回给定集合中的最小元素。Object min(Collection coll, Comparator comp):根据 Comparator 指定的顺序,返回给定集合中的最小元素。void fill(List list, Object obj):使用指定元素 obj 替换指定 List 集合中的所有元素。int frequency(Collection c, Object o):返回指定集合中指定元素的出现次数。int indexOfSubList(List source, List target):返回子 List 对象在父 List 对象中第一次出现的位置索引;如果父 List 中没有出现这样的子 List,则返回 -1。int lastIndexOfSubList(List source, List target):返回子 List 对象在父 List 对象中最后一次出现的位置索引;如果父 List 中没有岀现这样的子 List,则返回 -1。boolean replaceAll(List list, Object oldVal, Object newVal):使用一个新值 newVal 替换 List 对象的所有旧值 oldVal。

要求用户输入 3 个商品名称,然后使用 Collections 类中的 fill() 方法对商品信息进行重置操作,即将所有名称都更改为“未填写”。代码如下:

public class Test {public static void main(String[] args) {Scanner input = new Scanner(System.in);List products = new ArrayList();System.out.println("******** 商品信息 ********");for (int i = 0; i < 3; i++) {System.out.println("请输入第 " + (i + 1) + " 个商品的名称:");String name = input.next();products.add(name); // 将用户录入的商品名称保存到List集合中}System.out.println("重置商品信息,将所有名称都更改为'未填写'");Collections.fill(products, "未填写");System.out.println("重置后的商品信息为:");for (int i = 0; i < products.size(); i++) {System.out.print(products.get(i) + "\t");}}
}

如上述代码,首先循环录入 3 个商品名称,并将这些商品信息存储到 List 集合中,然后调用 Collections 类中的 fill() 方法将该集合中的所有元素值替换为“未填写”。最后使用 for 循环将替换后的集合元素输出。

运行该程序,执行结果如下所示。

******** 商品信息 ********
请输入第 1 个商品的名称:
苏打水
请输入第 2 个商品的名称:
矿泉水
请输入第 3 个商品的名称:
冰红茶
重置商品信息,将所有名称都更改为'未填写'
重置后的商品信息为:
未填写    未填写    未填写    

在一个集合中保存 4 个数据,分别输出最大最小元素和指定数据在集合中出现的次数。

public class Test {public static void main(String[] args) {ArrayList nums = new ArrayList();nums.add(2);nums.add(-5);nums.add(3);nums.add(0);System.out.println(nums); // 输出:[2, -5, 3, 0]System.out.println(Collections.max(nums)); // 输出最大元素,将输出 3System.out.println(Collections.min(nums)); // 输出最小元素,将输出-5Collections.replaceAll(nums, 0, 1);// 将 nums中的 0 使用 1 来代替System.out.println(nums); // 输出:[2, -5, 3, 1]// 判断-5在List集合中出现的次数,返回1System.out.println(Collections.frequency(nums, -5));Collections.sort(nums); // 对 nums集合排序System.out.println(nums); // 输出:[-5, 1, 2, 3]// 只有排序后的List集合才可用二分法查询,输出3System.out.println(Collections.binarySearch(nums, 3));}
}

如上述代码,向 List 集合中添加 4 个数据,然后调用 Collections 类中的 max() 和 min() 方法输出集合中的最大最小元素,replaceAll() 替换元素,frequency() 判断指定数据在 List 集合中出现的次数,最后用 binarySearch() 进行二分法查询。

运行上述程序,执行结果如下:

[2, -5, 3, 0]
3
-5
[2, -5, 3, 1]
1
[-5, 1, 2, 3]
3

复制

Collections 类的 copy() 静态方法用于将指定集合中的所有元素复制到另一个集合中。执行 copy() 方法后,目标集合中每个已复制元素的索引将等同于源集合中该元素的索引。

copy() 方法的语法格式如下:

void copy(List <? super T> dest,List<? extends T> src)

其中,dest 表示目标集合对象,src 表示源集合对象。

注意:目标集合的长度至少和源集合的长度相同,如果目标集合的长度更长,则不影响目标集合中的其余元素。如果目标集合长度不够而无法包含整个源集合元素,程序将抛出 IndexOutOfBoundsException 异常。

在一个集合中保存了 5 个商品名称,现在要使用 Collections 类中的 copy() 方法将其中的 3 个替换掉。代码如下:

public class Test {public static void main(String[] args) {Scanner input = new Scanner(System.in);List srcList = new ArrayList();List destList = new ArrayList();destList.add("苏打水");destList.add("木糖醇");destList.add("方便面");destList.add("火腿肠");destList.add("冰红茶");System.out.println("原有商品如下:");for (int i = 0; i < destList.size(); i++) {System.out.println(destList.get(i));}System.out.println("输入替换的商品名称:");for (int i = 0; i < 3; i++) {System.out.println("第 " + (i + 1) + " 个商品:");String name = input.next();srcList.add(name);}// 调用copy()方法将当前商品信息复制到原有商品信息集合中Collections.copy(destList, srcList);System.out.println("当前商品有:");for (int i = 0; i < destList.size(); i++) {System.out.print(destList.get(i) + "\t");}}
}

如上述代码,首先创建了两个 List 对象 srcList 和 destList,并向 destList 集合中添加了 5 个元素,向 srcList 集合中添加了 3 个元素,然后调用 Collections 类中 copy() 方法将 srcList 集合中的全部元素复制到 destList 集合中。由于 destList 集合中含有 5 个元素,故最后两个元素不会被覆盖。

运行该程序,具体的执行结果如下所示。

原有商品如下:
苏打水
木糖醇
方便面
火腿肠
冰红茶
输入替换的商品名称:
第 1 个商品:
燕麦片
第 2 个商品:
八宝粥
第 3 个商品:
软面包
当前商品有:
燕麦片    八宝粥    软面包    火腿肠    冰红茶

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

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

相关文章

平稳序列的预测和拟合之单位根检验

目录 1.建模步骤 2.单位根检验 2.1 DF检验&#xff08;以AR(1)模型为例&#xff09; DF检验的等价表达 DF检验的三种类型 R语言单位根检验&#xff1a; 2.2 ADF检验 ADF检验的三种类型 小结 1.建模步骤 2.单位根检验 对平稳序列建模&#xff0c;首先要确定序列是平稳的…

如何自己去写一个鼠标驱动_为什么要用哈密顿采样器(Hamiltonian Monte Carlo),以及如何自己写一个...

背景介绍&#xff1a;&#xff08;了解采样的可以跳过&#xff09;1&#xff09;为什么需要采样&#xff1a;简单的分布&#xff0c;比如高斯、exponential、gamma等等的样本都可以直接用numpy.random生成&#xff0c;但复杂的分布需要采样器生成。在贝叶斯、概率编程里面&…

Iterator(迭代器)遍历Collection集合元素

Iterator&#xff08;迭代器&#xff09;是一个接口&#xff0c;它的作用就是遍历容器的所有元素&#xff0c;也是 Java 集合框架的成员&#xff0c;但它与 Collection 和 Map 系列的集合不一样&#xff0c;Collection 和 Map 系列集合主要用于盛装其他对象&#xff0c;而 Iter…

java inputstream read_20191209-java部分流处理

流:流一般分为输入流(InputStream)和输出流(OutputStream)两类.但这种划分并不是绝对的.在Java开发环境中,主要是由包http://java.io中提供的一系列的类和接口来实现输入和输出处理.标准输入和输出处理则是由包java.lang中提供的类来处理的,但这些类又都是从包http://java.io中…

平稳序列的预测和拟合之模型识别

目录 1.计算样本相关系数和偏自相关系数 2.模型识别 模型定阶的困难 样本相关系数的近似分布及模型定阶经验方法 例题&#xff1a; 2.参数估计 常用估计方法&#xff1a; 1.矩估计 2.极大似然估计 3.最小二乘估计 R中&#xff0c;参数估计用arima函数 例题 小结 1.计算…

python自增_Python的自增运算与Python变量的浅析

一、关于Python的自增运算 学了C/C后再学习Python&#xff0c;不自觉地就打出了自增运算符&#xff0c;但是发现Python解释器不认识&#xff0c;查了下资料&#xff0c;发现Python中没有这个运算符。这里暂时不探讨自增运算符的内部实现原理&#xff0c;从语言设计角度来说&…

使用Lambda表达式遍历Iterator迭代器

Java 8 为 Iterator 引入了一个 forEachRemaining(Consumer action) 默认方法&#xff0c;该方法所需的 Consumer 参数同样也是函数式接口。当程序调用 Iterator 的 forEachRemaining(Consumer action) 遍历集合元素时&#xff0c;程序会依次将集合元素传给 Consumer 的 accept…

平稳序列的预测和拟合之模型检验

目录 1.模型的显著性检验 R语言实现 例题 2.参数显著性检验 例题 小结 1.模型的显著性检验 检验模型的有效性&#xff08;对信息的提取是否充分) 判定原则&#xff1a; 一个好的拟合模型应该能够提取几乎所有的样本相关信息&#xff0c;即残差序列应该为白噪声序列。反之…

oracle数据如何获取游标中动态字段_原来Python自带了数据库,用起来真方便!

Python大数据分析记录 分享 成长Python作为数据科学主流语言&#xff0c;被广泛用于数据读存、处理、分析、建模&#xff0c;可以说是无所不能。数据一般存放在本地文件或者数据库里&#xff0c;之前介绍过如何使用python读取本地文件&#xff0c;也对# PyMySQL、cx_Oracle…

使用foreach循环遍历Collection集合

使用 Java 5 提供的 foreach 循环迭代访问集合元素&#xff0c;而且更加便捷。示范了使用 foreach 循环来迭代访问集合元素。 public class ForeachTest {public static void main(String[] args) {// 创建一个集合Collection objs new HashSet();objs.add("百度Java教程…

平稳序列的预测和拟合之模型优化

目录 前提 准则 1、AIC准则 2、SBC &#xff08;BIC)准则 优化 小结 前提 问题提出:模型通过检验&#xff0c;说明是有效的&#xff0c;但有效的模型不唯一。 下面我们用一个例子来解释一下&#xff1a; 例4-7:试对某次化学反应的70个过程数据序列进行拟合。 d<-r…

css中如何实现帧布局_浅谈web前端中的表格布局与CSS盒子布局

在web前端设计排版时我们可能会用到表格布局和divCSS布局&#xff0c;但现在主要使用后者&#xff0c;为何&#xff1f;今天我们来谈一谈两者之间的发展和原理。话不多说下面来干货发展过程上个世纪Web开发人员流行使用表格进行文档整体布局。因为当时大部分浏览器不支持CSS&am…

使用Predicate操作Collection集合

Java 8 起为 Collection 集合新增了一个 removeIf(Predicate filter) 方法&#xff0c;该方法将会批量删除符合 filter 条件的所有元素。该方法需要一个 Predicate 对象作为参数&#xff0c;Predicate 也是函数式接口&#xff0c;因此可使用 Lambda 表达式作为参数。 示例使用…

油猴的简介和安装

目录 1.油猴简介 2.油猴插件安装 方法1 方法2 3.获取油猴脚本 4.脚本的使用 4.1 脚本的设置及功能 4.2 安装油猴脚本 4.3 新建脚本 5.脚本编写方法 功能注释 脚本权限 编写脚本 1.油猴简介 油猴脚本是一款免费的浏览器扩展和最为流行的用户脚本管理器&#xff0c…

Logistic回归——二分类 —— matlab

目录 1.简介 2.应用范围 3.分类 3.应用条件 4.原理详解 4.1 sigmod分类函数 4.2 建立目标函数 4.3 求解相关参数 5.实列分析 5.1 读取数据&#xff08;excel文件&#xff09; 5.2 分离数据集 5.3 求解前设定 5.4 求解目标函数 5.5 预测 5.6 预测分类 5.7 准确率…

java 抽象类_java中的抽象类

普通类可以直接产生实例化对象&#xff0c;并且在普通类之中可以包含有构造方法、普通方法、static方法、常量、变量的内容。而所谓的抽象类就是指在普通类的结构里面增加抽象方法的组成部分&#xff0c;抽象方法指的是没有方法体的方法&#xff0c;同时抽象方法还必须使用abst…

Stream操作Collection集合

独立使用 Stream 的步骤如下&#xff1a; 1 . 使用 Stream 或 XxxStream 的 builder() 类方法创建该 Stream 对应的 Builder。 2 . 重复调用 Builder 的 add() 方法向该流中添加多个元素。 3 . 调用 Builder 的 build() 方法获取对应的 Stream。 4 . 调用 Stream 的聚集方法…

Logistic回归——二分类 —— python

目录 1.简介 2.应用范围 3.分类 3.应用条件 4.原理详解 4.1 sigmod分类函数 4.2 建立目标函数 4.3 求解相关参数 5.实列分析 5.1 导入库 5.2 读取数据&#xff08;excel文件&#xff09; 5.3 分离数据集 5.4 求解前设定 5.5 求解目标函数 5.6 预测 5.7 预测分类…

dubbo官方文档_狂神说SpringBoot17:Dubbo和Zookeeper集成

狂神说SpringBoot系列连载课程&#xff0c;通俗易懂&#xff0c;基于SpringBoot2.2.5版本&#xff0c;欢迎各位狂粉转发关注学习。未经作者授权&#xff0c;禁止转载分布式理论什么是分布式系统&#xff1f;在《分布式系统原理与范型》一书中有如下定义&#xff1a;“分布式系统…

第一个脚本-HelloWorld

目录 前言 脚本的作用 创建脚本 开始编写我们这次的HelloWorld的对话框 前言 我的扩展主要使用:Tampermonkey&#xff0c;当然其他的有类似功能的也可以&#xff0c;我们就将这些统称为油猴吧。 本节主要内容: 描述脚本的作用和油猴,脚本的基本结构,创建一个脚本,使它能够…