一、选择
- 在下面代码中的(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接口的说法,以下哪个是错误的?B
A. Comparable位于java.lang包 B. 调用sort方法时,需要指定Comparable接口的实现类 C. Comparable接口的抽象方法是 int compareTo(T t) D. Comparable接口还可以用于数组的排序
二、编程
- 对英文单词进行排序,效果图如下:
任务
1、给list添加元素
2、输出排序前list中的内容
3、对list中的元素进行排序
4、输出排序后list中的内容
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class StringSort {
public static void main(String[] args) {
List<String> li=new ArrayList<String>();
li.add("orange");
li.add("tomato");
li.add("apple");
li.add("litchi");
li.add("banana");
Iterator<String> it=li.iterator();
System.out.println("排序前:");
while(it.hasNext()){
System.out.print(it.next()+" ");
}
System.out.println();
Collections.sort(li);
Iterator<String> is=li.iterator();
System.out.println("排序后:");
while(is.hasNext()){
System.out.print(is.next()+" ");
}
}
}
- 定义一个学生信息类,包括学号,姓名,年龄三个成员变量,然后按名字进行升序排序。(使用Comparator接口)
运行效果图:
任务:import java.util.Comparator; public class StudentTest implements Comparator<Student> { @Override public int compare(Student o1, Student o2) { String name1=o1.getName(); String name2=o2.getName(); int n=name1.compareTo(name2); return n; } }
public class Student { private int stuld; private String name; private int age; public int getStuld() { return stuld; } public void setStuld(int stuld) { this.stuld = stuld; } 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; } public Student(){ } public Student(int stuld,String name,int age){ this.stuld=stuld; this.name=name; this.age=age; } @Override public String toString() { return "[学号:" + stuld + ",姓名:" + name + ",年龄:" + age + "]"; }
public class Text { public static void main(String[] args) { List<Student> li=new ArrayList<>(); Student one=new Student(40,"peter",20); Student two=new Student(28,"angel",5); Student three=new Student(35,"tom",18); li.add(one); li.add(two); li.add(three); System.out.println("按名字排序前:"); Iterator<Student> it=li.iterator(); while(it.hasNext()){ System.out.println(it.next()); } System.out.println("学号排序后:"); Collections.sort(li, new StudentTest()); Iterator<Student> is=li.iterator(); while(is.hasNext()){ System.out.println(is.next()); } } }
- 定义一个员工信息类,包括编号,姓名,工资三个成员变量,要求工资定义为float类型,然后按工资进行降序排序。(使用Comparable接口)
运行效果图:
任务:public class Employee implements Comparable<Employee>{ private int id; private String name; private double salary; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } public Employee(){ } public Employee(int id,String name,double salary){ setId(id); setName(name); setSalary(salary); } @Override public String toString() { return "员工[编号:" + id + ", 姓名:" + name + ", 工资:" + salary + "]"; } @Override public int compareTo(Employee o) { double salary1=this.getSalary(); double salary2=o.getSalary(); int n=new Double(salary2-salary1).intValue(); return n; } }
public class Text { public static void main(String[] args) { List<Employee> li=new ArrayList<Employee>(); Employee one=new Employee(001,"张三",1800); Employee two=new Employee(002,"李四",2500); Employee three=new Employee(003,"王五",1600); li.add(one); li.add(two); li.add(three); System.out.println("排序前:"); Iterator<Employee> it=li.iterator(); while(it.hasNext()){ System.out.println(it.next()); } Collections.sort(li); System.out.println("排序后"); Iterator<Employee> is=li.iterator(); while(is.hasNext()){ System.out.println(is.next()); } } }