java中的Collections工具类

        Collections类是java中提供的一个工具类,它和接口Collection乍一看非常相像,但是二者的区别是非常大的,最明显的就是它们一个是类,而另一个是接口了。Collections工具类的作用是对Set 、Map、 List这些容器提供辅助方法来对容器中的元素进行排序、填充、查找等操作。

        在Collecctions工具类中的方法是极多的,三言两语难以说尽,因此这里我们只简单介绍几个常用的方法,对Collections工具类有个认识即可,对于不常用的方法,用到时进行简单类比即可。Collections工具类中的所有方法均为静态方法,因此在使用时只需要通过类名就可以对对应的方法进行进行调用。在Collections类中,我们常用的方法有sort、shufle、reverse、fill以及binnarySearch。这几个方法的具体作用如下:

        void sort(List):对List容器内的元素进行排序,排序规则按照升序;

        void shufle(List):对List容器内的元素进行随机排列;

        void reverse(List):对List容器内的元素进行逆序排列;

        void fill(List):用一个特定的对象重写整个List容器;

        int binnarySearch(List,Object):对于顺序的List容器,采用折半查找的方法查找指定对象,并返回该对象的索引。

        以上介绍的几个方法都是对List接口来说的因此在它们的参数中都需要传入一个List类型的容器。接下来我们演示这几个方法当中的前两个来说命Collections类的使用,其余的方法除了功能不同,用法是基本一样的。首先创建一个CollectionsTest类,在这个类中实例化一个List型容器list。容器list的泛型类型为String,因此添加的元素只能是String类型。将a,b,c,d乱序添加进容器list中,并遍历容器list中的元素,用作对照。

        由于Collections类中的方法均为静态方法,因此使用当中用的方法直接通过类名调用即可。通过Colkections调用sort方法,并将list作为参数传入。当我们再次遍历容器list中的元素是会发现元素的顺序从c、b、d、a变成了a、b、c、d。这就是sort的排序效果。

        需要说明的是,上面的这个排序操作是按照默认排序规则来进行排序的。在java中查找Collections类中的方法,会发现sort方法还有重载的方法,这个方法需要传入一个比较器作为参数,这时排序就是按照定义的比较器的排序规则来进行的了。就像在以下的演示代码中,定义的另一个List型的容器li一样,传入比较器StudentCoparator,它的怕排列顺序就是按照比比较器定义的排序来排列的。

        接下来说一下,shufle方法。这个方法的作用是对List型的容器进行随机排序。简单来说就是洗牌原理,将一副扑克牌进行洗牌操作就是将其其中的牌打乱,进行随机分配。比如在演示代码中对容器li使用shufle方法,这个对它进行遍历,可以发现程序每运行一次它打印出来的顺序都不一定是相同的,也就是随机的。值得说明的一点是,这个方法仍然有重载的方法,重载方法中需要传入一个随机对象,这个对象可以是默认的,也可以是添加了seed的。

        Random(seed)的使用方法如下:

  1. 创建实例:你可以使用给定的seed创建一个Random对象,例如 Random random = new Random(seed);
  2. 生成随机数:一旦有了Random对象,你可以调用其各种方法来生成不同范围的随机整数或浮点数,如nextInt()nextDouble()等。
  3. 设置种子:如果不提供seed,则默认使用系统时间作为种子,如果程序需要保证每次运行生成的随机数序列一致,可以明确指定seed值。

上面的这个描述可能比较抽象, 难点在于理解seed的作用。这里可以这样理解,如果我同时创建了两个Random对象,如果构造方法中的seed的值是一样的,那么这两个对象产生的随机数列也是一样的,这就是seed的作用。

package com.container.demo;import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;public class CollectionsTest {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("c");list.add("b");list.add("d");list.add("a");for (String str:list) {System.out.println(str);}System.out.println("_________________________");//通过Collections类进行排序Collections.sort(list);for (String str:list) {System.out.println(str);}System.out.println("______________________________");List<Student> li = new ArrayList<>();Student s1 = new Student ("linyi",20);Student s2 = new Student("linling",21);Student s3 = new Student("liner",21);li.add(s1);li.add(s2);li.add(s3);for (Student stu:li) {System.out.println(stu);}System.out.println("________________________");Collections.sort(li,new StudentComparator());for (Student stu:li) {System.out.println(stu);}System.out.println("____________________________");Collections.shuffle(li);for (Student stu:li) {System.out.println(stu);}System.out.println("________________________");Collections.shuffle(li,new Random());for (Student stu:li) {System.out.println(stu);}}
}

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

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

相关文章

编写一个基于其他系的linux系统并且把它打包为一个iso镜像思想

目录 前面写的一篇文章 前言 isolinux引导模式启动流程 为什么要initramdisk操作而不直接加载文件系统 编写系统的思想 可能问题 一般的iso镜像目前只支持最大4G的大小&#xff0c;需要怎么解决&#xff1f; 如何去找驱动 木木em哈哈想说的话&#xff08;与本博文无光&…

尊重·理解·协同:论团队合作中的认知提升与信誉建设

零、背景 为什么写博客&#xff1f; 给自己灌输大道理—唠叨哲学 定期总结&#xff1a;反思这段时间内的生活、学习或工作中的得失&#xff0c;提炼出具有普适性的经验和教训。 紧跟热点新闻来有点流量 独特视角&#xff1a;尽量优先进行——人云亦云&#xff0c;先学某一…

开源 150 T 数据(2023年之前所有数据)

开源 150 T 数据&#xff08;2023年之前所有数据&#xff09; 开源 150 T 数据生成大规模、高质量训练数据集 生成巨量数据 数据清洗和过滤 混合数据源 多级别训练和模型评估 探索新的训练策略多级别训练和模型评估探索新的训练策略 万卡 H100 集群训练 开源 150 T 数据 …

二进制方式部署k8s集群

前置知识点 1、生产环境部署K8s集群的两种方式 • kubeadm Kubeadm是一个K8s部署工具&#xff0c;提供kubeadm init和kubeadm join&#xff0c;用于快速部署Kubernetes集群。 • 二进制包 从github下载发行版的二进制包&#xff0c;手动部署每个组件&#xff0c;组成Kub…

【perl】脚本编程的一些坑案例

引言 记录自己跳进的【perl】编程小坑&#xff0c;以己为鉴。 1、eq $str1 "12345\n"; $str2 "12345"; if ($str1 eq $str2) { print "OK" } 上述代码不会打印 OK。特别在读文件 &#xff0c;匹配字符串时容易出BUG。 案例说明&#xff1a; 有…

[数据集][目标检测]游泳者溺水检测数据集VOC+YOLO格式8275张4类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;8275 标注数量(xml文件个数)&#xff1a;8275 标注数量(txt文件个数)&#xff1a;8275 标注…

中北大学算法课动态规划问题实验:题目1 数塔问题

目录 1.实验名称2.实验目的3.实验内容4.实验过程伪代码java代码 5.实验结论及心得代码运行截图心得 实验报告 1.实验名称 动态规划问题实验&#xff1a;题目1 数塔问题 2.实验目的 (1)掌握动态规划法的设计思想&#xff1b; (2)掌握数塔问题的具体实现过程&#xff1b; (3)熟…

评估大型语言模型生成文章的能力

1. AI解读 1.1. 总体概要 本文探讨了大型语言模型&#xff08;LLMs&#xff09;如GPT-4在生成特定领域&#xff08;如计算机科学中的自然语言处理NLP&#xff09;教育调查文章方面的能力和局限性。研究发现&#xff0c;尽管GPT-4能够根据特定指导生成高质量的调查文章&#x…

kafka consumer客户端消费逻辑解析

kafka consumer客户端消费逻辑解析 一、主要消费步骤二、提交策略【步骤2代码解析】【提交策略总结】 三、拉取策略&#xff08;待补充&#xff09;四、消费策略【代码解析】【消费策略总结】 一、主要消费步骤 这是kafka客户端拉取消息的入口&#xff0c;有4个主要部分 1、启…

苏东坡传-读书笔记三

苏东坡去世之后&#xff0c;一黄某获得苏东坡一珍贵的手稿&#xff0c;其中有苏东坡下列的名句&#xff1a; “处贫贱易&#xff0c;处富贵难。安劳苦易&#xff0c;安闲散难。忍痛易&#xff0c;忍痒难。人能安闲散&#xff0c;耐富贵&#xff0c;忍痒&#xff0c;真有道之士也…

详细分析Oracle修改默认的时间格式(四种方式)

目录 前言1. 会话级别2. 系统级别3. 环境配置4. 函数格式化5. 总结 前言 默认的日期和时间格式由参数NLS_DATE_FORMAT控制 如果需要修改默认的时间格式&#xff0c;可以通过修改会话级别或系统级别的参数来实现 1. 会话级别 在当前会话中设置日期格式&#xff0c;这只会影响…

uni-app (通过HBuilderX 和 VS Code 开发)详细连接过程教学。

使用 HBuilderX 创建 uni-app 项目 并编译到微信开发者工具。 uni-app 支持两种方式创建项目&#xff1a; 通过 HBuilderX 创建 通过命令行创建 首先我们需要先下载HBuilderX 下载链接地址&#xff1a;DCloud - HBuilder、HBuilderX、uni-app、uniapp、5、5plus、mui、wap2…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] LYA的登山之旅01(100分)- 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f…

《梦醒蝶飞:释放Excel函数与公式的力量》6.4 TODAY函数

第四节&#xff1a;6.4 TODAY函数 1&#xff09;TODAY函数概述 TODAY函数是Excel中一个非常有用的内置函数&#xff0c;它返回当前的日期。与NOW函数不同&#xff0c;TODAY函数仅返回日期部分&#xff0c;时间部分默认为午夜&#xff08;0:00&#xff09;。 2&#xff09;函…

[数据质量]手动实现 阿里云DataWorks 的数据质量监控告警功能

目录 手动实现 DataWorks 的数据质量监控告警功能1. 简介:2. 数据表准备2.1 tmp_monitor_tbl_info (数据监控信息表)2.2 tmp_monitor_rule_info (数据质量监控规则表)2.3 tmp_monitor_tbl_info_log_di (数据监控信息记录表) 3. 程序开发3.1 数据检查程序3.2 告警信息推送程序3.…

Jenkins教程-10-发送飞书测试报告通知

上一小节我们学习了发送企业微信测试报告通知的方法&#xff0c;本小节我们讲解一下发送飞书测试报告通知的方法。 1、自动化用例执行完后&#xff0c;使用pytest_terminal_summary钩子函数收集测试结果&#xff0c;存入本地status.txt文件中&#xff0c;供Jenkins调用 conft…

优化 C# 和 .NET Core Web API 中的 LINQ 查询

LINQ&#xff08;语言集成查询&#xff09;是 C# 中的一项强大功能&#xff0c;允许开发人员以可读且简洁的方式查询和操作数据。但是&#xff0c;LINQ 的使用效率低下可能会导致性能瓶颈&#xff0c;尤其是在处理 .NET Core Web API 中的大型数据集时。优化 LINQ 查询对于维护…

嵌入式 Linux 设备刷系统具体组成

嵌入式 Linux 设备刷系统具体组成 1 介绍1.1 概述1.2 嵌入式 Linux 的组成1.3 U-Boot1.4 Linux 内核1.5 设备树1.6 根文件系统 参考 1 介绍 1.1 概述 一个完整的 linux 系统&#xff0c;通常包含了 U-Boot、kernel、设备树以及根文件系统。 1.2 嵌入式 Linux 的组成 1.3 U-…

Java热门技术点总结:Lambda表达式与Stream API

第一部分&#xff1a;Lambda表达式 1. 简介 Lambda表达式是Java 8引入的一个非常重要的特性&#xff0c;它提供了一种简洁、灵活的函数式编程方式。Lambda表达式允许我们将函数作为参数传递&#xff0c;极大的简化了代码的编写。 2. 基本语法 Lambda表达式的基本语法如下&a…

Java基于jjwt操作jwt

之前讲解了jwt的相关知识&#xff0c;有不了解的&#xff0c;可以查看相关的文章JWT简介-CSDN博客&#xff0c;本节不再介绍&#xff0c;主要讲解有关java中如何通过jjwt库产生jwt以及解析jwt的相关操作。 添加maven依赖 <dependency><groupId>io.jsonwebtoken&l…