## 一、概述
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中
// 输出排序前的数据
// 排序
// 输出排序后的数据
}
}
```
- 阶段一 Java 零基础入门
- 步骤1:基础语法
- 第01课 初识
- 第02课 常量与变量
- 第03课 运算符
- 第04课 选择结构
- 第05课 循环结构
- 第06课 一维数组
- 第08课 方法
- 第09课 数组移位与统计
- 第10课 基础语法测试
- 第09课 基础语法测试(含答案)
- 步骤2:面向对象
- 第01课 类和对象
- 第02课 封装
- 第03课 学生信息管理
- 第04课 继承
- 第05课 单例模式
- 第06课 多态
- 第07课 抽象类
- 第08课 接口
- 第09课 内部类
- 第10课 面向对象测试
- 第10课 面向对象测试(含答案)
- 步骤3:常用工具类
- 第01课 异常
- 第02课 包装类
- 第03课 字符串
- 第04课 集合
- 第05课 集合排序
- 第06课 泛型
- 第07课 多线程
- 第08课 输入输出流
- 第09课 案例:播放器
- 第10课 常用工具测试(一)
- 第10课 常用工具测试(一)(答案)
- 第10课 常用工具测试(二)
- 第10课 常用工具测试(二)(答案)
- 阶段二 从网页搭建入门 JavaWeb
- 步骤1:HTML 与 CSS
- 第01课 HTML 入门
- 第01课 HTML 入门(作业)
- 第02课 CSS 入门
- 第02课 CSS 入门(作业)
- 第03课 CSS 布局
- 第03课 CSS 布局(作业)
- 步骤2:JavaScript 与前端案例
- 第01课 JavaScript 入门
- 第01课 JavaScript 入门(作业)
- 第02课 仿计算器
- 第03课 前端油画商城案例
- 第04课 轮播图
- 第05课 网页搭建测试
- 第05课 网页搭建测试(含答案)
- 步骤3:JavaScript 教程
- 入门
- 概述
- 基本语法
- 数据类型
- 概述
- 数值
- 字符串
- undefined, null 和布尔值
- 对象
- 函数
- 数组
- 运算符
- 算术运算符
- 比较运算符
- 布尔运算符
- 位运算符
- 运算顺序
- 语法专题
- 数据类型的转换
- 错误处理机制
- 标准库
- String
- Date
- Math
- DOM
- 概述
- Document 节点
- 事件
- EventTarget 接口
- 事件模型
- 常见事件
- 阶段三 数据库开发与实战
- 步骤1:初始数据库操作
- 第01课 数据类型
- 第02课 表的管理
- 第03课 数据管理
- 第04课 常用函数
- 第05课 JDBC 入门
- 第06课 Java 反射
- 第07课 油画商城
- 第08课 数据库基础测试
- 步骤2:MyBatis 从入门到进阶
- 第01课 IntelliJ IDEA 开发工具入门
- 第02课 Maven 入门
- 第03课 工厂模式
- 第04课 MyBatis 入门
- 第05课 MyBatis 进阶
- 第06课 商品信息管理
- 第07课 MyBatis 基础测试
- 步骤3:Redis 数据库与 Linux 下项目部署
- 第01课 Linux 基础
- 第02课 Linux 下 JDK 环境搭建及项目部署
- 第03课 Redis 入门
- 阶段四 SSM 到 Spring Boot 入门与综合实战
- 步骤1:Spring 从入门到进阶
- 第01课 Spring 入门
- 第02课 Spring Bean 管理
- 第03课 Spring AOP
- 第04课 基于 AspectJ 的 AOP 开发
- 第05课 JDBC Template
- 第06课 Spring 事务管理
- 第07课 人员管理系统开发
- 第08课 Spring 从入门到进阶测试
- 步骤2:Spring MVC 入门与 SSM 整合开发
- 第01课 Spring MVC 入门与数据绑定
- 第02课 Restful 风格的应用
- 第03课 SpringMVC 拦截器
- 第04课 办公系统核心模块
- 步骤3:Spring Boot 实战
- 第01课 Spring Boot 入门
- 第02课 校园商铺项目准备
- 第03课 校园商铺店铺管理
- 第04课 校园商铺商品管理及前台展示
- 第05课 校园商铺框架大换血
- 步骤4:Java 面试
- 第01课 面试准备
- 第02课 基础面试技巧
- 第03课 Web基础与数据处理
- 第04课 主流框架