1.什么是Comparable接口
此接口强行对实现它的每个类的对象进行整体排序。此排序被称为该类的自然排序
2.实现什么方法
int compareTo(T o) 比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
强烈推荐 (x.compareTo(y)==0) == (x.equals(y)) 这种做法,但不是 严格要求这样做。一般来说,任何实现 Comparable 接口和违背此条件的类都应该清楚地指出这一事实。推荐如此阐述:“注意:此类具有与 equals 不一致的自然排序。”
参数: o - 要比较的对象。 返回:
负整数、零或正整数,根据此对象是小于、等于还是大于指定对象。 抛出:
ClassCastException - 如果指定对象的类型不允许它与此对象进行比较。
importjava.util.*;
- public
class EmployeeSortTest { - public
static void main(String[] args) { - // TODO Auto-generated method stub
-
Employee[] staff = new Employee[ 3 ]; -
staff[ 0 ] = new Employee( "harry Hacker" , 35000 ); -
staff[ 1 ] = new Employee( "carl cracke" , 75000 ); -
staff[ 2 ] = new Employee( "tony Tester" , 38000 ); -
Arrays.sort(staff); //sort方法可以实现对对象数组排序,但是必须实现 Comparable接口 - for
(Employee e: staff) -
System.out.println( "id=" +e.getId()+ " name=" +e.getName()+ - ".salary=" +e.getSalary());
-
} - }
- class
Employee implements Comparable - {
- public
Employee(String n, double s) -
{ -
name = n; -
salary = s; -
Random ID = new Random(); -
id = ID.nextInt( 10000000 ); -
} - public
int getId() -
{ - return
id; -
} - public
String getName() -
{ - return
name; -
} - public
double getSalary() -
{ - return
salary; -
} - public
void raiseSalary( double byPercent) -
{ - double
raise = salary *byPercent/ 100 ; -
salary+=raise; -
} - public
int compareTo(Employee other) -
{ - if
(id - return
- 1 ; - if
(id>other.id) - return
1 ; - return
0 ; -
} - private
int id; - private
String name; - private
double salary;
}
4.与Comparator的区别
Comparator位于包java.util下,而Comparable位于包java.lang下,Comparable接口将比较代码嵌入自身类中,而后者在一个独立的类中实现比较。 如果类的设计师没有考虑到Compare的问题而没有实现Comparable接口,可以通过Comparator来实现比较算法进行排序,并且为了使用不同的排序标准做准备,比如:升序、降序。