集合排序

在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;
	}
	
	@Override
	public String toString() {
		return "Student [name=" + name + ", number=" + number + "]";
	}
    
	/**
	 * Comparable接口的compareTo方法
	 */
	@Override
	public 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;
	}
	
	@Override
	public String toString() {
		return "Car [type=" + type + ", price=" + price + "]";
	}
}


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

public class CarComparator implements Comparator<Car>{

	@Override
	public 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方法的方法体。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值