💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## 一、概述 Collections 类提供了许多操作集合的静态方法,借助这些静态方法可以实现集合元素的排序、填充和复制等操作。 ## 二、对基本数据类型和字符串进行排序 ### 2.1 基本数据类型集合排序 【例题】编写一个程序,对用户输入的 5 个商品价格进行排序后输出。 ``` Scanner input = new Scanner(System.in); List<Integer> prices = new ArrayList<Integer>(); for (int i= 0; i < 5; i++) { System.out.println("请输入第 " + (i + 1) + " 个商品的价格:"); int p = input.nextInt(); prices.add(Integer.valueOf(p)); // 将录入的价格保存到List集合中 } Collections.sort(prices); // 调用sort()方法对集合进行排序 System.out.println("价格从低到高的排列为:"); for (int i = 0; i < prices.size(); i++) { System.out.print(prices.get(i) + "\t"); } ``` 【选择】在下面代码中的(1)(2)处可以填写()(选择两项) ``` List< (1) > list = new ArrayList< (2) >(); ``` ``` A int int B Integer Integer C String String D string string ``` ### 2.2 字符串集合排序 【例题】循环录入 5 个商品的名称,并按商品的名称进行排序。 ``` Scanner input = new Scanner(System.in); List<String> list = new Array<String>(); for (int i = 0; i < 5; i++) { System.out.println("请输入第 " + (i + 1) + " 个商品的名称:"); String name = input.next(); list.add(name); // 将录入的商品名称存到List集合中 } Collections.sort(list); // ... ``` 【编程】对英文单词进行排序,效果图如下: ``` 排序前:orange tomato apple litchi banana 排序后:apple banana litchi orange tomato ``` ``` public class StringSort { public static void main(String[] args) { // 给list添加元素 // 输出排序前list中的内容 // 对list中的元素进行排序 // 输出排序后list中的内容 } } ``` ## 三、Comparator 接口 【例题】按照学生成绩对学生进行排序。 ``` public class Student { private String name; private double score; // constructor ... // getter setter ... // toString() ... } import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class Test { public static void main(String[] args) { List<Student> list = new ArrayList<>(); list.add(new Student("ming", 80)); list.add(new Student("hong", 70)); list.add(new Student("hua", 90)); Collections.sort(list, new Comparator<Student>() { @Override public int compare(Student o1, Student o2) { return o1.getScore() - o2.getScore(); } }); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } } } ``` 【选择】下列说法中不正确的是()(选择一项) ``` A Comparator 接口用于对自定义类进行整体排序 B Comparator 接口可以将 Comparator 传递给 sort 方法 C int compare(T o1, T o2) 比较用来排序的两个对象 D boolean equals(Object obj) 指示对象 obj 是否是等于当前对象。 此方法不可以被 Object 类中的 equals 方法覆盖 ``` 【编程】定义一个学生信息类,包括学号、姓名、年龄三个成员变量,然后按名字进行升序排序。(使用 Comparator 接口)运行效果如下: ``` 按名字排序前: [学号:40,年龄:20,姓名:peter] [学号:28,年龄:5,姓名:angel] [学号:35,年龄:18,姓名:tom] 按名字排序后: [学号:28,年龄:5,姓名:angel] [学号:40,年龄:20,姓名:peter] [学号:35,年龄:18,姓名:tom] ``` ``` // 实现 Comparator 接口 public class StudentTest { // 实现接口中的方法 public static void main(String[] args) { // 定义 Student 类的对象 // 将对象添加到 list 中 // 输出排序前的数据 // 排序 // 输出排序后的数据 } } ``` ## 四、Comparable 接口 【例题】按照学生成绩对学生进行排序。 ``` public class Student implements Comparable<Student> { // 此处省略代码 ... @Override public int compareTo(Student o) { return this.getScore() - o.getScore(); } } import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class Test { public static void main(String[] args) { List<Student> list = new ArrayList<>(); // 此处省略向列表中添加元素 ... Collections.sort(list); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } } } ``` 【选择】关于 Comparable 接口的说法,以下哪个是错误的()(选择一项) ``` A Comparable 位于 java.lang 包 B 调用 sort 方法后,需要指定 Comparable 接口的实现类 C Comparable 接口的抽象方法是 int compareTo(T t) D Comparable 接口还可以用于数组的排序 ``` 【编程】定义一个员工信息类,包括编号、姓名、工资三个成员变量,要求工资定义为 float 类型,然后按工资进行降序排序。(使用 Comparable 接口)运行效果图如下: ``` 排序前: 员工[编号:emp001,姓名:张三,工资:1800.0] 员工[编号:emp002,姓名:李四,工资:2500.0] 员工[编号:emp003,姓名:王五,工资:1600.0] 排序后: 员工[编号:emp002,姓名:李四,工资:2500.0] 员工[编号:emp001,姓名:张三,工资:1800.0] 员工[编号:emp003,姓名:王五,工资:1600.0] ``` ``` public class EmployeeTest { public static void main(String[] args) { // 定义Employee类的对象 // 将对象添加到List中 // 输出排序前的数据 // 排序 // 输出排序后的数据 } } ```