Comparable接口

我的未来我决定 提交于 2019-12-10 08:32:07
public interface Comparable<T>

此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法

实现此接口的对象列表(和数组)可以通过 Collections.sort(和 Arrays.sort)进行自动排序。实现此接口的对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器

Arrays.sort(staff);

方法摘要
int compareTo(T o)

         比较此对象与指定对象的顺序。

比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。

  • 参数:

  • o - 要比较的对象。

  • 返回:

  • 负整数、零或正整数,根据此对象是小于、等于还是大于指定对象。

  • 抛出:

  • ClassCastException - 如果指定对象的类型不允许它与此对象进行比较。

package ComparableTest;

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Random;

public class EmployeeSortTest {
	
	public static void main(String[] args) {
		Employee[] staff = new Employee[3];
		staff[0] = new Employee("lee",123);
		staff[1] = new Employee("mary",43);
		staff[2] = new Employee("tom",54231);
		
		System.out.println("排序前:");
		for(Employee e:staff) {
			System.out.println("id="+e.getId()+" name="+e.getName()+" salary="+e.getSalary());
		}
		
		System.out.println("排序后");
		Arrays.sort(staff);//sort方法可以实现对对象数组排序,但必须实现Comparable接口
		for(Employee e:staff) {
			System.out.println("id="+e.getId()+" name="+e.getName()+" salary="+e.getSalary());
		}
		
	}
	
	
}


/*
 * 因为要实现对Employee对象的排序,所以在Employee类中要实现Employee接口
 * 也就是要实现compareTo()方法。
 * */
class Employee implements Comparable<Employee> {

	String name;
	double salary;
	int id;
	public Employee(String name,double s) {
		this.name = name;
		this.salary = s;
		Random ID = new Random();
		id = ID.nextInt(1000000);
	}
	public String getName() {
		return name;
	}
	public double getSalary() {
		return salary;
	}
	public int getId() {
		return id;
	}
	
	public void raiseSalary(double byPercent) {
		double raise = salary*byPercent/100;
		salary += raise;
	}
	
	@Override
	public int compareTo(Employee o) {
		if(id<o.id) {
			return -1;
		}
		if(id>o.id) {
			return 1;
		}
		return 0;
	}
	
}



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!