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)
:将集合中元素按照指定规则排序。
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:降序
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:默认排序规则。
- 使用前提:
- 被排序的集合里的元素实现Comparable接口;
- 重写CompareTo()方法:
- 自己(this)- 参数:升序
- 参数 - 自己(this):降序
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;
}
}
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学习笔记!欢迎订阅专栏!
相关内容
👉 JavaSE详细笔记专栏
往期精彩内容
👉 Java中的流程控制【干货笔记】
👉 Java中的数组【干货笔记】
👉 Java类与对象【干货笔记】
👉 Java笔试题专栏