本文共 5625 字,大约阅读时间需要 18 分钟。
使用Collections.sort
方法对列表进行排序。这种方法适用于按自然顺序排序的场景,比如对整数列表进行升序排列。
import java.util.ArrayList;import java.util.Collections;import java.util.List;public class ListSort { public static void main(String[] args) { Listlist = new ArrayList<>(); list.add(5); list.add(13); list.add(4); list.add(9); Collections.sort(list); System.out.println(list.toString()); }}
程序运行结果:[4, 5, 9, 13]
,按升序排列。
对于自定义对象,实现Comparable
接口并重写compareTo
方法来定义排序规则。例如,根据用户的年龄排序。
import java.util.ArrayList;import java.util.Collections;import java.util.List;public class UserMax { public static void main(String[] args) { Listlist = new ArrayList<>(); list.add(new User("张三", 5)); list.add(new User("李四", 30)); list.add(new User("王五", 19)); list.add(new User("陈十七", 17)); Collections.sort(list); System.out.println(list.toString()); }}class User implements Comparable { private String name; private int age; public User(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 "User [name=" + name + ", age=" + age + "]"; } @Override public int compareTo(User user) { return this.age - user.getAge(); }}
程序运行结果:按年龄升序排列[User [name=张三, age=5], User [name=陈十七, age=17], User [name=王五, age=19], User [name=李四, age=30]]
。
匿名内部类可以在方法范围内覆盖原有的排序规则,提供自定义的Comparator
逻辑。
import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;public class UserAnonymous { public static void main(String[] args) { Listlist = new ArrayList<>(); list.add(new User("张三", 5)); list.add(new User("李四", 30)); list.add(new User("王五", 19)); list.add(new User("陈十七", 17)); Collections.sort(list, new Comparator () { @Override public int compare(User u1, User u2) { int diff = u1.getAge() - u2.getAge(); if (diff > 0) return 1; if (diff < 0) return -1; return 0; } }); System.out.println(list.toString()); }}
程序运行结果与上一示例相同。
使用Collections.max
和Collections.min
方法直接获取最大值和最小值。
import java.util.ArrayList;import java.util.Collections;import java.util.List;public class ListSort { public static void main(String[] args) { Listlist = new ArrayList<>(); list.add(5); list.add(13); list.add(4); list.add(9); Collections.sort(list); System.out.println("排序后列表:" + list.toString()); Integer max = Collections.max(list); Integer min = Collections.min(list); System.out.println("最大值:" + max); System.out.println("最小值:" + min); }}
程序运行输出:排序后列表:[4, 5, 9, 13]
最大值:13
最小值:4
实现Comparable
接口后,直接使用Collections.max
和Collections.min
方法来找最大值和最小值。
import java.util.ArrayList;import java.util.Collections;import java.util.List;public class UserMaxMin { public static void main(String[] args) { Listlist = new ArrayList<>(); list.add(new User("张三", 5)); list.add(new User("李四", 30)); list.add(new User("王五", 19)); list.add(new User("陈十七", 17)); User max = Collections.max(list); System.out.println("最大值:" + max.toString()); User min = Collections.min(list); System.out.println("最小值:" + min.toString()); }}class User implements Comparable { private String name; private int age; public User(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 "User [name=" + name + ", age=" + age + "]"; } @Override public int compareTo(User user) { return this.age - user.getAge(); }}
程序运行输出:最大值:User [name=李四, age=30]
最小值:User [name=陈十七, age=17]
使用匿名内部类实现Comparator
接口来定义比较逻辑,直接获取最大值和最小值。
import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;public class UserAnonymous { public static void main(String[] args) { Listlist = new ArrayList<>(); list.add(new User("张三", 5)); list.add(new User("李四", 30)); list.add(new User("王五", 19)); list.add(new User("陈十七", 17)); User max = Collections.max(list, new Comparator () { @Override public int compare(User u1, User u2) { int diff = u1.getAge() - u2.getAge(); if (diff > 0) return 1; if (diff < 0) return -1; return 0; } }); System.out.println("最大值:" + max.toString()); User min = Collections.min(list, new Comparator () { @Override public int compare(User u1, User u2) { int diff = u1.getAge() - u2.getAge(); if (diff > 0) return 1; if (diff < 0) return -1; return 0; } }); System.out.println("最小值:" + min.toString()); }}
程序运行输出:最大值:User [name=李四, age=30]
最小值:User [name=陈十七, age=17]
转载地址:http://skufk.baihongyu.com/