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.rhkb.cn/news/362331.html

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

相关文章

Springboot + Mybatis-Plus代码生成指南

使用 Spring Boot 和 MyBatis-Plus 生成代码&#xff0c;可以大大简化开发流程&#xff0c;可以保持编码的规范性&#xff0c;生成单元测试等。以下是详细步骤&#xff1a; 配置pom.xml <dependency><groupId>com.baomidou</groupId><artifactId>myb…

4.1 四个子空间的正交性

一、四个子空间的正交性 如果两个向量的点积为零&#xff0c;则两个向量正交&#xff1a; v ⋅ w v T w 0 \boldsymbol v\cdot\boldsymbol w\boldsymbol v^T\boldsymbol w0 v⋅wvTw0。本章着眼于正交子空间、正交基和正交矩阵。两个子空间的中的向量&#xff0c;一组基中的向…

Python期末模拟题库[python123题库]

期末模拟题库 一、单项选择题 1、下列关于Python语言的特点的说法中&#xff0c;错误的是()‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪…

使用ESP32开发一款chat机器人

目的&#xff1a;使用语音对话的方式实现和ai机器人对话&#xff0c;核心硬件如下 主板&#xff1a; ESP32S3 语音&#xff08;拾音器-麦克风&#xff09;&#xff1a;INMP441全向麦克风模块 购买记录&#xff1a; https://oshwhub.com/shukkkk/esp32s3_tft_mp3

原创作品—医疗行业软件界面UI、交互设计

在医疗行业大屏UI设计中&#xff0c;首要的是以用户为中心&#xff0c;深入理解医生、护士、管理层等用户群体的具体需求和工作流程。大屏设计应直观展示关键医疗数据、患者信息、设备状态等&#xff0c;确保用户能够迅速、准确地获取所需信息。同时&#xff0c;功能布局应合理…

【6.26更新】Win11 23H2 22631.3810镜像:免费下载!

微软已发布六月最新的可选更新补丁KB5039302&#xff0c;用户安装后&#xff0c;系统版本将升级至22631.3810。此次更新将会逐步推出一些新功能&#xff0c;在“设置”主页上添加了新的Game Pass推荐卡&#xff0c;同时显示桌面按钮再次默认位于任务栏上。接下来小编给大家带来…

flash申请内存失败,导致老化问题解决

背景 在闪光灯初始化阶段客制化了一个buffer&#xff0c;下发到kernel的闪光灯驱动中用于保存读取闪光灯寄存器的值。功能测试都是正常的&#xff0c;但是一旦开始批量跑产线老化测试会有1/4500左右概率的后主摄拍照卡住。定位根因是闪光灯初始化失败&#xff0c;进一步原因就…

SherlockChain:基于高级AI实现的智能合约安全分析框架

关于SherlockChain SherlockChain是一款功能强大的智能合约安全分析框架&#xff0c;该工具整合了Slither工具&#xff08;一款针对智能合约的安全工具&#xff09;的功能&#xff0c;并引入了高级人工智能模型&#xff0c;旨在辅助广大研究人员针对Solidity、Vyper和Plutus智…

第六十九:iview 表格汇总怎么拿到传过来的数据,而不是自动累加,需要自定义方法

话不多少&#xff0c;先看官方解释 我这个简单&#xff0c;所以所有说明都在图上了 handleSummary({ columns, data }){console.log(columns, data)let sums {}columns.forEach((item,index)>{const key item.key;console.log("key",item)if(index 0){console.…

煤安防爆手机为什么能在煤矿井下使用

煤安防爆手机之所以能在煤矿井下使用&#xff0c;是因为它们经过特殊设计&#xff0c;符合严格的防爆安全标准&#xff0c;能够防止电火花引发爆炸&#xff0c;同时具备防尘防水、抗冲击等特性&#xff0c;确保在恶劣的煤矿环境中稳定可靠地运行&#xff0c;为工作人员提供安全…

【FFmpeg】avformat_open_input函数

【FFmpeg】avformat_open_input函数 1.avformat_open_input1.1 初始化输入格式&#xff08;init_input&#xff09;1.1.1 文件路径判断格式&#xff08;av_probe_input_format2&#xff09;1.1.1.1 格式探测&#xff08;read_probe&#xff09;1.1.1.2 扩展匹配检查&#xff08…

iOS 其他应用的文件如何在分享中使用自己的应用打开

废话少说 一、第一步&#xff1a;先配置好plist文件 右击info.plist如下图文件打开 根据自己需要配置支持的文件类型&#xff0c;也可使用property List中配置&#xff0c;一样的 其他的文件可是参考文档&#xff1a;System-Declared Uniform Type Identifiers 可复制的代码&am…

【前端】[vue3] [uni-app] 组件样式击穿:deep

我是在开发uni-app时测试的思路&#xff0c;大家可以借鉴一下。 我这边测试的是uni组件&#xff0c;但是我觉得即便你用element-plus之类的&#xff0c;样式击穿的思路都相同。 我自定义了一个全局样式scss文件&#xff0c;并引入到了项目中。(如图) 利用vue3 中的 deep 方式…

Java使用poi生成word文档的简单实例

Java使用poi生成word文档的简单实例 生成的效果如下&#xff1a; 用到的poi的简单的知识 新建一个word对象 //新建文件 XWPFDocument document new XWPFDocument();新建段落以及文字样式 //创建段落 XWPFParagraph paragraph document.createParagraph(); paragraph.se…

收银系统源码-开源收银系统-私有化独立部署

千呼新零售2.0-支持OEM私有化独立部署和全开源源码 千呼新零售2.0-支持OEM私有化独立部署和全开源源码 千呼新零售2.0-支持OEM私有化独立部署和全开源源码 千呼新零售2.0-支持OEM私有化独立部署和全开源源码 如需了解请私信交流

电脑系统重装怎么操作?分享四个win10重装系统方法

“我遇到了一些笔记本电脑的问题&#xff0c;别人告诉我解决这个问题需要重新安装Win10电脑系统。但我不记得我把光盘放在哪里了&#xff0c;我能否在不丢失文件的情况下重新安装操作系统&#xff1f;电脑系统重装怎么操作&#xff1f;”虽然电脑自带系统中有多种方法可供选择&…

【最佳实践】前端如何搭建自己的cli命令行工具,让自己编码的时候如虎添翼

作为前端开发人员&#xff0c;搭建自己的前端CLI工具是一个有趣且有意义的事情。以下是一篇详细的教程&#xff0c;包括使用场景和案例。 使用场景 假设你是一个前端团队的一员&#xff0c;需要频繁地在不同的项目中执行一些标准化的任务&#xff0c;比如&#xff1a; 根据模…

【02-02】SpringMVC基于注解的应用

一、请求处理 1、常用注解 RequestMapping 作用&#xff1a;用来匹配客户端发送的请求&#xff08;用来处理URL映射&#xff0c;将请求映射到处理方法中&#xff09;&#xff0c;可以在类或者方法上使用。 用在类上&#xff0c;可以将请求模块化&#xff0c;避免请求方法中的…

前端 Array.sort() 源码学习

源码地址 V8源码Array 710行开始为sort()相关 Array.sort()方法是那种排序呢&#xff1f; 去看源码主要是源于这个问题 // In-place QuickSort algorithm. // For short (length < 22) arrays, insertion sort is used for efficiency.源码中的第一句话就回答了我的问题…

微软发布Phi-3系列语言模型:手机端的强大AI助手

大模型&#xff08;LLMs&#xff09;在处理复杂任务时展现出的巨大潜力&#xff0c;但却需要庞大的计算资源和存储空间&#xff0c;限制了它们在移动设备等资源受限环境中的应用。微软公司最新发布的Phi-3系列语言模型&#xff0c;以其卓越的性能和小巧的体积&#xff0c;打破了…