Comparable接口实现自然排序
已实现接口的类
String,包装类都已经实现了该接口,重写了compareTo()方法,给出了比较两个对象大小的方法,进行了从小到大的排列。
重写compareTo(obj)规则
如果当前对象this大于形参对象obj,则返回正整数,否则返回负整数。
自定义类实现Comparable排序
如果自定义类要实现排序,可以让自定义类实现Comparable接口,重写compareTo()方法。
public class Goods implements Comparable{
private String name;
private double price;
public Goods() {
}
public Goods(String name, double price) {
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public int compareTo(Object o) {
if(o instanceof Goods){
Goods goods = (Goods) o;
if(this.price>goods.price) return 1;
else if(this.price<goods.price) return -1;
else return 0;
}
return 0;
}
}
Comparator实现定制排序
过程
重写compare(Object o1,Object o2)方法,比较o1和o2的大小,如果方法返回正整数,则表示o1大于o2;如果返回0,表示相等,否则返回负整数,表示o1小于o2。
代码
import java.util.Arrays;
import java.util.Comparator;
public class test {
public static void main(String[] args) {
String[] str = new String[]{"AA","CC","MM","GG","DD"};
Arrays.sort(str, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if(o1 instanceof String && o2 instanceof String){
String s1 = (String) o1;
String s2 = (String) o2;
return -s1.compareTo(s2);
}
throw new RuntimeException("输入的有一方不是字符串")
}
});
return;
}
}
区别
Comparable接口的方式一旦确定,类的对象在任何位置都可以比较大小。
而Comparator接口属于临时性的比较。