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;先学某一…

ORC与Parquet列式存储的区别

ORC与Parquet列式存储 1、ORC与Parquet列式存储2、ORC与Parquet的区别 列式存储&#xff08;Columnar Storage&#xff09;是一种优化的数据存储方式&#xff0c;与传统的行式存储&#xff08;Row Storage&#xff09;相比&#xff0c;列式存储在数据压缩、查询性能、I/O效率等…

开源 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; 有…

python3.12.4 常用四个数据类型的各个函数详解

在完成目标前&#xff0c;我们最好审视自己到底有什么&#xff0c;有多远。 零、介绍 我打算详细了解一下常用的几种数据类型的各个接口&#xff0c;主要的来源是python shell中的 help(…)命令。python中基本的数据类型有四个 list, tuple, dict, set, 宽泛的讲&#xff0c;肯…

C++编程逻辑讲解step by step:存折和信用卡类。

题目 存折和信用卡类&#xff0c;信用卡是一种存折&#xff0c;可以透支&#xff0c;可以存款。 代码 #include<iostream> #include<string> using namespace std; class passbook {public: passbook(string nam,int n,float m) {namenam; numn; balancem; } vo…

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

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

python每日学20:一个更加实用的类

背景&#xff1a;今天继续学习《python学习手册》第28章《一个更加实际的示例》&#xff0c;今天学习本章前言&#xff0c;页码是803-808 本章要创建二个更加实际的类&#xff1a; Person: 一个创建并处理人员相关的信息的类 Manager: 一个定制化的Person,修改了所继承的行为。…

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

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

webpack 打包配置

主要实现功能 处理html、css、js、vue、jsx、图片等文件压缩处理好的文件分割压缩好的文件路由懒加载开启缓存和热更新开启多线程打包… 新建【webpack.config.js】 新建【webpack.dev.js】开发打包配置新建【webpack.prod.js】生产打包配置新建【webpack.config.js】&#…

Spring Boot中的事务管理策略

Spring Boot中的事务管理策略 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨在Spring Boot应用中的事务管理策略&#xff0c;以及如何通过合…

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

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

Pytorch中torch.cat()函数的使用及说明

如果你有两个形状为 (3, 4) 的tensor A 和 B&#xff0c;并且你想要在第一个维度上连接它们&#xff0c;你可以这样做&#xff1a; import torchA torch.randn(3, 4) B torch.randn(3, 4) C torch.cat([A, B], dim0) # dim0 表示在第一个维度上连接 此时 C 的形状将会是 …

kafka consumer客户端消费逻辑解析

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

【Rust】function和methed的区别

文章目录 functionmethedAssociated Functions 参考资料 一句话总结&#xff1a; function和methed很多都是相同的。 不同点在于&#xff1a; methed定义在结构体里面&#xff0c;并且它的第一个参数肯定是self&#xff0c;代表结构体实例。方法需要用实例名.方法名调用当然结…

苏东坡传-读书笔记三

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

三生随记——暗夜诊所

在偏远的小镇边缘&#xff0c;矗立着一座看似普通的诊所。这座诊所历史悠久&#xff0c;据传已经存在了几十年&#xff0c;但关于它的具体来历和背后的故事&#xff0c;却鲜有人知。它的外表看似破旧不堪&#xff0c;但内部却异常整洁&#xff0c;散发着一种神秘而诡异的气息。…

vCenter-vAPI-Endpoint service health shows as Yellow

- 问题摘要&#xff1a;vAPI-Endpoint service health shows as Yellow - 解决方案/工作方法&#xff1a; 使用命令重启vAPI Endpoint service后该服务运行正常。 service-control --stop vmware-vapi-endpoint service-control --start vmware-vapi-endpoint VMware KB&…