关于Comparable和Comparator的区别
相同点:
1.两者都是接口。
2.两者的功能都是排序。
不同点:
1.Comparable在java.lang包下,Comparator在java.util包下
2.(a)实现Comparable接口要重写compareTo方法,
int compareTo(Object o)抽象方法
返回值说明:
比较此对象(this)与指定对象(形参o)的顺序。
如果该对象this小于(<)指定对象(形参o),就返回负整数
如果该对象this大于(>)指定对象(形参o),就返回正整数
如果该对象this等于(=)指定对象(形参o),就返回0
(b)实现Comparator接口要重写compare方法
int compare(Object o1, Object o2)
关于Comparable的具体实现方式如下:
//定义一个Product类来实现Comparable接口
public class Product implements Comparable<Product>{
private String name;
private int priceCents;
public Product(String name, int priceCents) {
this.name = name;
this.priceCents = priceCents;
}
@Override
public String toString() {
return this.name + ": " + this.priceCents;
}
@Override
public int compareTo(Product other) {
if(this.priceCents>other.priceCents){
return 1;
} else if(this.priceCents< other.priceCents){
return -1;
}else {
return 0;
}
}
public static void main(String[] args) {
Product p1=new Product("student1",300);
Product p2=new Product("student2",200);
Product p3=new Product("student3",300);
//结果输出为1
System.out.println(p1.compareTo(p2));
//结果输出为0
System.out.println(p1.compareTo(p3));
//结果输出为-1
System.out.println(p2.compareTo(p3));
} }
关于Comparator的具体实现方式如下:
public class Product2 {
private String name;
private int priceCents;
private int stockLevel;
public Product2(String name, int priceCents, int stockLevel) {
this.name = name;
this.priceCents = priceCents;
this.stockLevel = stockLevel;
}
@Override
public String toString() {
return this.name + ": " + this.stockLevel + " @ $" + this.priceCents / 100.0;
}
static class AlphabeticalComparator implements Comparator<Product2> {
@Override
public int compare(Product2 p1, Product2 p2) {
return p1.name.compareTo(p2.name);
}
}
static class PriceStockComparator implements Comparator<Product2> {
@Override
public int compare(Product2 p1, Product2 p2) {
if (p1.stockLevel > 0 && p2.stockLevel == 0) {
return -1;
} else if (p1.stockLevel == 0 && p2.stockLevel > 0) {
return 1;
} else {
if (p1.priceCents < p2.priceCents) {
return -1;
} else if (p1.priceCents > p2.priceCents) {
return 1;
} else {
return 0;
}
}
}
}
public static void main(String[] args) {
Product2 p1 = new Product2("cjl", 100, 200);
Product2 p2 = new Product2("hs", 400, 100);
AlphabeticalComparator a1 = new AlphabeticalComparator();
//输出负整数,c比h小
System.out.println(a1.compare(p1, p2));
//输出负整数
PriceStockComparator c1 = new PriceStockComparator();
System.out.println(c1.compare(p1, p2));
}
}