Loading... > java.utils.Collections:集合工具类,用来对集合进行操作。 # 1、常用方法 `public static <T> boolean addAll(Collection<T> c, T... elements)` :往集合中添加一些元素。 `public static void shuffle(List<?> list)` :打乱集合顺序。 `public static <T> void sort(List<T> list)` :将集合中元素按照默认规则排序(默认升序)。 `public static <T> void sort(List<T> list, Comparator<? super T> T)` :将集合中元素按照指定规则排序。 ```java has-numbering public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<>(); // 集合添加元素 Collections.addAll(list, 1, 3, 8, 100, 60); System.out.println(list); // 默认排序 Collections.sort(list); // 默认升序 System.out.println(list); // 打乱集合顺序 Collections.shuffle(list); System.out.println(list); } ``` # 2、Comparator接口比较器 java.util.Comparator:代表一个比较器。自定义排序规则,使用更加灵活。 * 参数1 - 参数2:升序 * 参数2 - 参数1:降序 ```java has-numbering public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); Collections.addAll(list, "cbd", "abg", "sba", "nba"); System.out.println(list); // 默认排序(升序) Collections.sort(list); System.out.println(list); // 降序排列:Comparator Collections.sort(list, new Comparator<String>() { @Override public int compare(String o1, String o2) { return o2.charAt(0) - o1.charAt(0); // 降序规则 } }); System.out.println(list); } ``` # 3、Comparable接口自然排序 java.lang.Comparable:默认排序规则。 * 使用前提: 1. 被排序的集合里的元素实现Comparable接口; 2. 重写CompareTo()方法: * 自己(this)- 参数:升序 * 参数 - 自己(this):降序 ```java has-numbering public class Student implements Comparable<Student> { private String name; private int age; public Student() { } public Student(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + '}'; } @Override public int compareTo(Student o) { return o.age - this.age; } } ``` ```java has-numbering public class Test42 { public static void main(String[] args) { ArrayList<Student> students = new ArrayList<>(); students.add(new Student("张三", 18)); students.add(new Student("李四", 17)); students.add(new Student("王五", 18)); students.add(new Student("张三", 14)); students.add(new Student("张三", 18)); for (Student student : students) { System.out.println(student); } System.out.println("========================"); Collections.sort(students); for (Student student : students) { System.out.println(student); } // 自定义按名字升序排序 Collections.sort(students, new Comparator<Student>() { @Override public int compare(Student o1, Student o2) { return o1.getName().charAt(0) - o2.getName().charAt(0); } }); System.out.println("========================"); for (Student student : students) { System.out.println(student); } // 年龄降序,名字升序 Collections.sort(students, new Comparator<Student>() { @Override public int compare(Student o1, Student o2) { int result = o2.getAge() - o1.getAge(); if (result == 0) { result = o1.getName().charAt(0) - o2.getName().charAt(0); } return result; } }); System.out.println("========================"); for (Student student : students) { System.out.println(student); } } } ``` # 4、Comparable和Compatator区别 * Comparable:针对类。强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的compareTo方法 被称为它的自然比较方法。只能在类中实现compareTo()一次,不能经常修改类的代码实现自己想要的排序。实现 此接口的对象列表(和数组)可以通过Collections.sort(和Arrays.sort)进行自动排序,对象可以用作有序映射中 的键或有序集合中的元素,无需指定比较器。 * Comparator:针对对象。强行对某个对象进行整体排序。可以将Comparator 传递给sort方法(如Collections.sort或 Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用Comparator来控制某些数据结构(如有序set或 有序映射)的顺序,或者为那些没有自然顺序的对象collection提供排序。 > 感谢小伙伴们的关注! > 你的点赞、评论、关注、收藏是对博主的最大鼓励! > 持续更新JavaSE学习笔记!欢迎订阅专栏! 最后修改:2021 年 10 月 30 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏