一、选择
- 在下面代码中的(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.opp;
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<String>();
list.add("orange");
list.add("tomato");
list.add("apple");
list.add("litchi");
list.add("banana");
//输出排序前list中的内容
System.out.println("排序前:");
for(String i:list){
System.out.print(i + " ");
}
//对list中的元素进行排序
Collections.sort(list);
//输出排序后list中的内容
System.out.println("\n排序后:");
for(String i:list){
System.out.print(i + " ");
}
}
}
- 定义一个学生信息类,包括学号,姓名,年龄三个成员变量,然后按名字进行升序排序。(使用Comparator接口)
运行效果图:
任务:package com.dodoke.opp1; 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) { List<Student> list = new ArrayList<Student>(); Student stu1 = new Student(40,20,"perter"); Student stu2 = new Student(28,5,"angel"); Student stu3 = new Student(35,18,"tom"); list.add(stu1); list.add(stu2); list.add(stu3); //输出排序前list中的内容 System.out.println("排序前:"); for(Student i:list){ System.out.println(i); } //输出排序后list中的内容 System.out.println("排序后(name):"); //sort创建匿名 Collections.sort(list, new Comparator<Student>() { @Override//compare(Cat o1, Cat o2) public int compare(Student s1, Student s2) { // 按name升序排序 String name1=s1.getName(); String name2=s2.getName(); int n=name1.compareTo(name2); return n; } }); for (Student i : list){ System.out.println(i); } } }
- 定义一个员工信息类,包括编号,姓名,工资三个成员变量,要求工资定义为float类型,然后按工资进行降序排序。(使用Comparable接口)
运行效果图:
任务:package com.dodoke.opp1; public class Employee { private String id; private String name; private float money; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public float getMoney() { return money; } public void setMoney(float money) { this.money = money; } public Employee() { super(); } public Employee(String id, String name, float money) { super(); this.id = id; this.name = name; this.money = money; } @Override public String toString() { return "员工[编号:" + id + ",姓名:" + name + ",工资:" + money + "]"; } }
package com.dodoke.opp1; 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<Employee>(); list.add(emp1); list.add(emp2); list.add(emp3); System.out.println("排序前:"); for (Employee emp : list){ System.out.println(emp); } Collections.sort(list,new Comparator<Employee>(){ @Override public int compare(Employee s1 , Employee s2 ){ float my1 = s1.getMoney(); float my2 = s2.getMoney(); return my2 - my1; } }); System.out.println("排序后:"); for (Employee emp : list){ System.out.println(emp); } } }