集合工具类 Collections:提升集合操作效率

news/2025/1/15 12:15:25/

文章目录

    • 多元素添加:`addAll` 方法
    • 随机置换:`shuffle` 方法
    • 自定义对象排序:`sort` 方法
    • 总结

在这里插入图片描述

在Java的集合框架中,Collections 是一个包含了许多操作集合的静态方法的工具类。通过使用 Collections 类提供的方法,我们能够更加高效地操作集合,完成一些常见的操作,如添加元素、随机置换、排序等。本文将介绍一些常用的 Collections 类的方法,以及如何在特定情境下应用它们。
在这里插入图片描述

多元素添加:addAll 方法

Collections.addAll(Collection<? super T> c, T... elements) 方法可以将多个元素添加至指定的集合中。需要注意的是,容器中的元素类型必须是添加元素的类型或其父类型及其祖辈。这个方法在批量添加元素时非常方便,可以一次性将多个元素加入集合,减少了重复的操作步骤。

List<String> list = new ArrayList<>();
Collections.addAll(list, "apple", "banana", "cherry");

在上面的例子中,我们使用 Collections.addAll 方法将三个水果字符串添加到了一个 ArrayList 集合中。
在这里插入图片描述

随机置换:shuffle 方法

Collections.shuffle(List<?> list) 方法可以随机地置换指定列表中的元素顺序,使用随机默认源。这在需要对集合元素进行随机排序或洗牌的情况下非常有用,比如实现一个随机抽奖的功能。

List<Integer> numbers = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
Collections.shuffle(numbers);

上面的例子展示了如何使用 Collections.shuffle 方法对整数列表进行随机置换。
在这里插入图片描述

自定义对象排序:sort 方法

Collections.sort(List<T> list) 方法可以根据元素的自然顺序(实现了 Comparable 接口)对指定列表进行升序排序。如果我们有一个自定义对象,比如 Student 类,想要按照年龄大小进行排序,可以按照以下步骤操作:

  1. 定义 Student 类并实现 Comparable 接口。
  2. compareTo 方法中定义排序规则,升序排序时应返回当前对象的属性减去参数对象的属性。
  3. 如果需要降序排序,应返回参数对象的属性减去当前对象的属性。
class Student implements Comparable<Student> {private String name;private int age;// 构造方法、getter、setter等@Overridepublic int compareTo(Student otherStudent) {return this.age - otherStudent.age; // 升序排序// return otherStudent.age - this.age; // 降序排序}
}

此外,如果我们希望按照特定的规则进行排序,可以使用另一个重载的 sort 方法:Collections.sort(List<T> list, Comparator<? super T> c)。通过传入一个比较器,我们可以实现更加灵活的排序规则。与 Comparable 接口不同的是,Comparator 接口可以在使用时进行重写排序方法,根据需求动态指定排序规则。

class AgeComparator implements Comparator<Student> {@Overridepublic int compare(Student student1, Student student2) {return student1.getAge() - student2.getAge();}
}

上述代码展示了如何通过实现 Comparator 接口来自定义排序规则,并在 Collections.sort 方法中使用。
在这里插入图片描述

总结

Collections 类为我们提供了许多方便、高效的方法,用于处理集合中的元素。无论是进行批量添加、随机置换还是自定义排序,这些方法都大大提升了集合操作的效率和灵活性。通过灵活运用这些方法,我们可以更好地应对不同的集合操作需求,提供更好的用户体验。同时,在使用 sort 方法进行自定义对象排序时,我们可以根据实际情况选择实现 Comparable 接口或使用 Comparator 接口,以满足不同的排序需求。

在这里插入图片描述


http://www.ppmy.cn/news/1020942.html

相关文章

MS9920T & MS9930T 3~10节锂电池或磷酸盐电池管理芯片 可分别替代BQ76920、BQ76930

MS9920T &#xff06; MS9930T 3~10节锂电池或磷酸盐电池管理芯片 可分别替代BQ76920、BQ76930 北京冠宇铭通 一级代理 可提供技术支持 产品简述 MS99x0T 系列模拟前端 (AFE) 芯片包含 2款&#xff0c;MS9920T 和 MS9930T 。其中 MS9920T 最 多支持 5 组电池串联&…

C++中的C风格字符串

C中的C风格字符串 C 风格字符串是一种特殊的字符数组。您在前面编写代码时使用过字符串字面量&#xff0c;它们就是 C 风 格字符串&#xff1a; std::cout << "Hello World";这与下面使用数组的方式等价&#xff1a; char sayHello[] {H, e, l, l, o, , W…

在SpringBoot项目中使用线程池创建一个线程案例

目录 1. 首先,在你的Spring Boot项目的配置类中,创建一个`ThreadPoolTaskExecutor`的Bean:2. 在你的Service类中,创建一个异步方法,并使用`@Async`注解将其标记为异步方法,该方法将在线程池中执行:3. 在Controller中调用异步方法:在Spring Boot项目中使用线程池可以通过…

Linux学习之sed删除、追加、插入、更改、读写文件、下一行、打印、退出和seq命令

cat /etc/redhat-release看到操作系统是CentOS Linux release 7.6.1810&#xff0c;uname -r看到内核版本是3.10.0-957.el7.x86_64&#xff0c;sed --version可以看到sed版本是4.2.2。 echo a : 1 : good : g >> sed_daicpnrwq.txt echo b : 2 : well : w >> sed…

如果新电脑是刚安装的mysql,但是旧电脑迁移过来的文件里面有相关的rails文件,运行rake db:migrate一直报错

$ bundle exec rake db:migrate#运行完命令报错 rake aborted! LoadError: libmysqlclient.so.21: cannot open shared object file: No such file or directory - /home/meiyi/.asdf/installs/ruby/2.6.9/lib/ruby/gems/2.6.0/gems/mysql2-0.5.5/lib/mysql2/mysql2.so /home/m…

ejbca:8443报文跟踪

安装客户端证书后&#xff0c;访问管理员页面 :8443/ejbca/adminweb 同时在wireshark抓包 1、客户端向对端发出Client hello 在Server Hello看到一个颁发给客户端的证书&#xff0c;颁发给5be85c9c1df9&#xff08;客户端node hostname 5be85c9c1df9&#xff09;但没有在Clie…

JAVA volatile 关键字

volatile 是JAVA虚拟机提供的轻量级的同步机制&#xff0c;有三大特性 1、保证可见性 2、不保证原子性 3、禁止指令重排 JMM JAVA内存模型本身是一种抽象的概念并不真实存在 它描述的是一组规则或规范&#xff0c;提供这组规范定义了程序中各个变量&#xff08;包括实例变…

指针---进阶篇(二)

指针---进阶篇&#xff08;二&#xff09; 前言一、函数指针1.抛砖引玉2.如何判断函数指针&#xff1f;&#xff08;方法总结&#xff09; 二、函数指针数组1.什么是函数指针数组&#xff1f;2.讲解函数指针数组3.模拟计算器&#xff1a;讲解函数指针数组 三、指向函数指针数组…