對集合中的對象進行排序分別實現Comparable和comparator接口

public class Driver {
	private String name;
	private int age;
	private int driveAge;//駕齡
	public Driver(String name, int age, int driveAge) {
		super();
		this.name = name;
		this.age = age;
		this.driveAge = driveAge;
	}
	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 int getDriveAge() {
		return driveAge;
	}
	public void setDriveAge(int driveAge) {
		this.driveAge = driveAge;
	}
	@Override
	public String toString() {
		return "name=" + name + ", age=" + age + ", driveAge=" + driveAge;
	}
	
}

public class Car implements Comparable<Car>{
	private String band;//品牌
	private double topSpeed;//最高速度
	private double price;//價格
	private Driver driver;//司機
	public Car(String band, double topSpeed, double price, Driver driver) {
		super();
		this.band = band;
		this.topSpeed = topSpeed;
		this.price = price;
		this.driver = driver;
	}
	public String getBand() {
		return band;
	}
	public void setBand(String band) {
		this.band = band;
	}
	public double getTopSpeed() {
		return topSpeed;
	}
	public void setTopSpeed(double topSpeed) {
		this.topSpeed = topSpeed;
	}
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
	}
	public Driver getDriver() {
		return driver;
	}
	public void setDriver(Driver driver) {
		this.driver = driver;
	}
	@Override
	public String toString() {
		return "band=" + band + ", topSpeed=" + topSpeed + ", price=" + price + ", driver=" + driver ;
	}
	@Override
	public int compareTo(Car o) {
		int x=(int) (o.getTopSpeed()-this.getTopSpeed());
		return x;
	}
	
}

public class CarDriverComparator implements Comparator<Car>{

	@Override
	public int compare(Car o1, Car o2) {
		// TODO Auto-generated method stub
		//駕齡比較
		int num1=o2.getDriver().getDriveAge()-o1.getDriver().getDriveAge();
		//最大速度
		int num2=(int) (num1==0?o2.getTopSpeed()-o1.getTopSpeed():num1);
		return num2;
	}

}
public class CarTest {
	public static void main(String[] args) {
		List<Car> list=new ArrayList<Car>();
		//創建4個司機對象
		Driver d1=new Driver("aa",23,12);
		Driver d2=new Driver("bb",24,10);
		Driver d3=new Driver("cc",25,12);
		Driver d4=new Driver("dd",26,17);
		//創建4個Car對象
		Car c1=new Car("寶馬",120,120000,d1);
		Car c2=new Car("林肯",200,200000,d2);
		Car c3=new Car("紅旗",100,100000,d3);
		Car c4=new Car("五菱",90,70000,d4);
		//添加到集合中
		list.add(c1);
		list.add(c2);
		list.add(c3);
		list.add(c4);
		//遍歷輸出
		System.out.println("輸出集合元素:");
		Iterator<Car> c=list.iterator();
		while(c.hasNext()){
			System.out.println(c.next());
		}
		//comparable排序
		System.out.println("comparable排序(按照速度從大到小排序):");
		Collections.sort(list);
		for(Car x:list){
			System.out.println(x);
		}
		//comparator排序
		System.out.println("comparator排序(按照駕齡從大到小排序,如果駕齡相同,速度從大到小排序):");
		Collections.sort(list,new CarDriverComparator());
		for(Car x:list){
			System.out.println(x);
		}
	}
}

結果:

輸出集合元素:
band=寶馬, topSpeed=120.0, price=120000.0, driver=name=aa, age=23, driveAge=12
band=林肯, topSpeed=200.0, price=200000.0, driver=name=bb, age=24, driveAge=10
band=紅旗, topSpeed=100.0, price=100000.0, driver=name=cc, age=25, driveAge=12
band=五菱, topSpeed=90.0, price=70000.0, driver=name=dd, age=26, driveAge=17
comparable排序(按照速度從大到小排序):
band=林肯, topSpeed=200.0, price=200000.0, driver=name=bb, age=24, driveAge=10
band=寶馬, topSpeed=120.0, price=120000.0, driver=name=aa, age=23, driveAge=12
band=紅旗, topSpeed=100.0, price=100000.0, driver=name=cc, age=25, driveAge=12
band=五菱, topSpeed=90.0, price=70000.0, driver=name=dd, age=26, driveAge=17
comparator排序(按照駕齡從大到小排序,如果駕齡相同,速度從大到小排序):
band=五菱, topSpeed=90.0, price=70000.0, driver=name=dd, age=26, driveAge=17
band=寶馬, topSpeed=120.0, price=120000.0, driver=name=aa, age=23, driveAge=12
band=紅旗, topSpeed=100.0, price=100000.0, driver=name=cc, age=25, driveAge=12
band=林肯, topSpeed=200.0, price=200000.0, driver=name=bb, age=24, driveAge=10
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章