---------------------------------------------------------------------
开发工具和关键技术: MyEclipse 10 和 java
撰写时间: 20190501
---------------------------------------------------------------------
此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法。
Comparable是排序接口。若一个类实现了Comparable接口,就意味着该类支持排序。实现了Comparable接口的类的对象的列表或数组可以通过Collections.sort或Arrays.sort进行自动排序。
此外,实现此接口的对象可以用作有序映射中的键或有序集合中的集合,无需指
定比较器。
建议(虽然不是必需的)最好使自然排序与 equals 一致。这是因为在使用自然排序与 equals 不一致的元素(或键)时,没有显式比较器的有序集合(和有序映射表)行为表现“怪异”。尤其是,这样的有序集合(或有序映射表)违背了根据 equals 方法定义的集合(或映射表)的常规协定。
此接口只有一个方法compareTo,比较此对象与指定对象的顺序,如果该对象小
于、等于或大于指定对象,则分别返回负整数、零或正整数。
接下来看下例子, 第一步先创建一个类来实现Comparable这个接口, 然后再类里面实现compareTo方法。可以在compareto方法里面定义排序顺序, 比如先按成绩排序, 但成绩一样的时候就按名字排序。从小到大的顺序是 this - o, 从大到小就是o - this。
接着看主方法, 创建个数组, 然后往数组里面添加数据。但注意的是在add方法里面还不能直接传值, 还要再new 一下sort这个类再传值。
把值传完进去之后就直接调用Collections.sort这个方法,再把person这个数组放进去. 然后再遍历输出一下就行了
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ListComparableDemo {
public static void main(String[] args) {
List<sort> person = new ArrayList<sort>();
person.add(new sort("小A", 59));
person.add(new sort("小H", 70));
person.add(new sort("小G", 90));
person.add(new sort("小E", 75));
person.add(new sort("小W", 63));
person.add(new sort("小D", 84));
//第三步 调用sort 排序
Collections.sort(person);
//遍历输出
for (sort comparable : person) {
System.out.println(comparable.getName() + " " + comparable.getScore());
}
}
}
//实现Comparable接口
class sort implements Comparable<sort>{
//声明变量
private String name;
private int score;
//构造器
public sort(String name, int score) {
super();
this.name = name;
this.score = score;
}
//创建get 和 set 方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setAge(int score) {
this.score = score;
}
@Override
//创建compareto方法
public int compareTo(sort o) {
//从小到大 this - o
//从大到小 o - this
if (this.score == o.score) {
return this.name.compareTo(o.name);
}else{
return this.score - o.score;
}
}
}