Java中的对象,正常情况下,只能进行比较: ==或!=。不能使用>或< 但是在开发场景中,我们需要对多个对象进行排序,言外之意,就需要比较对象的大小。使用两个接口中的任何一个: Comparable 或Compare
Comparable
Comparable接口的使用举例:
1.像String、包装类等实现了Comparable接口,重写了compareTo(obj)方法,给出了比较两个对象的方法
2.重写compareTo(obj)的规则:
如果当前对象this.大于形参对象obj,则返回正整数,
如果当前对象this小于形参对象obj,则返回负整数,
如果当前对象this等于形参对象obj,则返回零。
public class test{
public static void main(String[] args) {
Goods[] arr = new Goods[4];
arr[0] = new Goods("Huawei",23);
arr[1] = new Goods("Xiaomi",22);
arr[2] = new Goods("OPPO",23);
arr[3] = new Goods("VIVO",24);
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));;
}
}
class Goods implements Comparable{
String name;
int price;
public Goods(String name,int price){
this.name = name;
this.price = price;
}
@Override
public String toString() {
return "产品:"+ this.name + "价格:" + this.price;
}
@Override
public int compareTo(Object o) {
if (o instanceof Goods){
if (this.price > ((Goods) o).price){
return 1;
}else if (this.price < ((Goods) o).price){
return -1;
}else{
return this.name.compareTo(((Goods) o).name);
}
}
throw new RuntimeException("请传入Goods对象");
}
}
Comparator
当元素的类型没有实现java. Lang. Comparable接口而又不方便修改代码,或者实现了java. Lang. Comparable接口的排序规则不适合当前的操作,那么可以考虑使用Comparator 的对象来排序
重写compare(Object o1, Object o2)方法,比较o1和o2的大小:
如果方法返回正整数,则表示o1大于o2
如果返回0,表示相等
返回负整数,表示o1小于o2
public class test{
public static void main(String[] args) {
Goods[] arr = new Goods[4];
arr[0] = new Goods("Huawei",23);
arr[1] = new Goods("Xiaomi",22);
arr[2] = new Goods("OPPO",23);
arr[3] = new Goods("VIVO",24);
Arrays.sort(arr, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
Goods g1 = (Goods)o1;
Goods g2 = (Goods)o2;
if (g1.price > g2.price){
return -1;
}else if (g1.price < g2.price){
return 1;
}else {
return 0;
}
}
});
System.out.println(Arrays.toString(arr));;
}
}
class Goods{
String name;
int price;
public Goods(String name,int price){
this.name = name;
this.price = price;
}
@Override
public String toString() {
return "产品:"+ this.name + "价格:" + this.price;
}
}