一、选择
- 在下面代码中的(1)(2)处可以填写(多选) BC
A. int int B. Integer Integer C. String String D. string string
- 下列说法中不正确的是: D
A. Comparator接口用于对自定义类进行整体排序 B. Comparator接口可以将Comparator传递给sort方法 C. int compare(T o1,T o2)比较用来排序的两个对象 D. boolean equals(Object obj)指示对象obj是否是“等于”当前对象。此方法不可以被Object类中的equals方法覆盖
- 关于Comparable接口的说法,以下哪个是错误的?D
A. Comparable位于java.lang包 B. 调用sort方法时,需要指定Comparable接口的实现类 C. Comparable接口的抽象方法是 int compareTo(T t) D. Comparable接口还可以用于数组的排序
二、编程
- 对英文单词进行排序,效果图如下:
任务
1、给list添加元素
2、输出排序前list中的内容
3、对list中的元素进行排序
4、输出排序后list中的内容
package com.dodoke;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class StringSort {
public static void main(String[] args) {
//给list添加元素
List<String> list = new ArrayList<>();
list.add("orange");
list.add("tomato");
list.add("apple");
list.add("litchi");
list.add("banana");
//输出排序前list中的内容
System.out.println("排序前:");
for (String str : list){
System.out.print(str + " ");
}
//对list中的元素进行排序
Collections.sort(list);
//输出排序后list中的内容
System.out.println("\n排序后:");
for (String str1 : list){
System.out.print(str1 + " ");
}
}
}
- 定义一个学生信息类,包括学号,姓名,年龄三个成员变量,然后按名字进行升序排序。(使用Comparator接口)
运行效果图:
任务:
package com.dodoke.comparatorTest;
/**
* 学生类
* 成员变量:学号、姓名、年龄
*/
public class Student {
private int studentNumber;
private String name;
private int age;
//重写toString方法
@Override
public String toString() {
return "[学号:" + studentNumber + ", 年龄:" + age + ", 姓名:" + name + ']';
}
public Student() {
}
public Student(int studentNumber, String name, int age) {
this.setStudentNumber(studentNumber);
this.setName(name);
this.setAge(age);
}
public int getStudentNumber() {
return studentNumber;
}
public void setStudentNumber(int studentNumber) {
this.studentNumber = studentNumber;
}
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;
}
}
package com.dodoke.comparatorTest;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class StudentTest {
public static void main(String[] args){
//定义Student类的对象,并添加到列表中
Student stu1 = new Student(40,"peter",20);
Student stu2 = new Student(28,"angel",5);
Student stu3 = new Student(35,"tom",18);
List<Student> list = new ArrayList<>();
list.add(stu1);
list.add(stu2);
list.add(stu3);
System.out.println("按名字排序前:");
for (Student stu : list){
System.out.println(stu);
}
System.out.println("按名字排序后:");
Collections.sort(list, new Comparator<Student>() {//内部匿名函数
@Override
public int compare(Student s1, Student s2) {
// 按名字升序排序
int n = s1.getName().compareTo(s2.getName());
return n;
}
});
for (Student stu : list){
System.out.println(stu);
}
}
}
- 定义一个员工信息类,包括编号,姓名,工资三个成员变量,要求工资定义为float类型,然后按工资进行降序排序。(使用Comparable接口)
运行效果图:
任务:
package com.dodoke.comparableTest;
import java.util.Comparator;
/**
* 员工信息类
* 员工变量:编号、姓名、工资
*/
public class Employee {
private String serialNumber;
private String name;
private float salary;
//重写toString方法
@Override
public String toString() {
return "员工[编号:" + serialNumber + ", 姓名:" + name + ", 工资:" + salary + "]";
}
public Employee() {
}
public Employee(String serialNumber, String name, float salary) {
this.setSerialNumber(serialNumber);
this.setName(name);
this.setSalary(salary);
}
public String getSerialNumber() {
return serialNumber;
}
public void setSerialNumber(String serialNumber) {
this.serialNumber = serialNumber;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(float salary) {
this.salary = salary;
}
static class SalaryComparator implements Comparator<Employee>{
@Override
public int compare(Employee e1, Employee e2) {
//按工资降序排序
int a = (int)e1.getSalary();
int b = (int)e2.getSalary();
return b-a;
}
}
}
package com.dodoke.comparableTest;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class EmployeeTest {
public static void main(String[] args) {
//定义三个Employee类的对象,并添加到列表
Employee emp1 = new Employee("emp001","张三",1800.0f);
Employee emp2 = new Employee("emp002","李四",2500.0f);
Employee emp3 = new Employee("emp003","王五",1600.0f);
List<Employee> list = new ArrayList<>();
list.add(emp1);
list.add(emp2);
list.add(emp3);
System.out.println("排序前:");
for (Employee emp : list){
System.out.println(emp);
}
Collections.sort(list,new Employee.SalaryComparator());
System.out.println("排序后:");
for (Employee emp : list){
System.out.println(emp);
}
}
}