集合排序

来源:互联网 发布:网络药品经营许可证 编辑:程序博客网 时间:2024/05/02 12:54

在Java中对一个装着对象的集合进行排序有两种方法:

         1. 对象实现Comparable接口

         2. 使用Comparator接口

我们定义一个Student对象,包含两个成员:名字name和学号number,实现Comparable接口

public class Student implements Comparable<Student>{private String name;private String number;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getNumber() {return number;}public void setNumber(String number) {this.number = number;}@Overridepublic String toString() {return "Student [name=" + name + ", number=" + number + "]";}    /** * Comparable接口的compareTo方法 */@Overridepublic int compareTo(Student o) {//比较两个学生的姓名return this.name.compareTo(o.getName());}}


定义一个Car类,用来展示使用Comparator来对集合进行排序

public class Car {private String type;private int price;public Car(String type, int price) {this.type = type;this.price = price;}public String getType() {return type;}public void setType(String type) {this.type = type;}public int getPrice() {return price;}public void setPrice(int price) {this.price = price;}@Overridepublic String toString() {return "Car [type=" + type + ", price=" + price + "]";}}


定义Comparator的实现类,泛型的参数是Car

public class CarComparator implements Comparator<Car>{@Overridepublic int compare(Car car1, Car car2) {return car1.getType().compareTo(car2.getType());}}





进行测试,关键是Collections.sort(List)和Collections.sort(List, Comparator)这两个方法

public class Test{public static void main(String[] args) {List<Student> students = new ArrayList<Student>();Student student1= new Student("周伯通","2013");Student student2= new Student("欧阳锋","2014");Student student3= new Student("郭靖","2015");Student student4= new Student("黄蓉","2016");Student student5= new Student("杨过","2017");Student student6= new Student("小龙女","2018");students.add(student1);students.add(student2);students.add(student3);students.add(student4);students.add(student5);students.add(student6);//排序前System.out.println("--------------排序前-----------------");for(Student student: students){System.out.println(student.toString());}System.out.println();//排序后System.out.println("--------------排序后-----------------");//进行排序Collections.sort(students);for(Student student: students){System.out.println(student.toString());}List<Car> cars = new ArrayList<Car>();Car car1 = new Car("兰博基尼",525);Car car2 = new Car("玛莎拉蒂",323);Car car3 = new Car("保时捷",260);Car car4 = new Car("法拉利",487);Car car5 = new Car("奥迪",80);Car car6 = new Car("布加迪威龙",526);cars.add(car1);cars.add(car2);cars.add(car3);cars.add(car4);cars.add(car5);cars.add(car6);System.out.println();System.out.println();System.out.println("---------Comparator的使用-----------");//排序前System.out.println("--------------排序前-----------------");for(Car car: cars){System.out.println(car.toString());}System.out.println();//排序后System.out.println("--------------排序后-----------------");//进行排序Collections.sort(cars, new CarComparator());for(Car car: cars){System.out.println(car.toString());}}}

运行截图:



相对于Comparable,Comparator可以更好地根据情况更改排序的字段,即对哪个属性进行排序。Comparable是一种写死了的形式,每次更改时都需要更改实现了Comparable接口的compareTo方法的方法体。

0 0