一、为什么需要Comparable接口?
在实际应用中,我们经常需要比较两个自定义对象的大小。而这些自定义对象的比较,并不像比较基本类型数据那么简单。它们往往有许多属性,我们一般都是根据比较其中的一个或多个属性值,来确定对象的顺序。
现在我们介绍Java中一种常用的用于比较对象的接口,Comparable接口。
二、Comparable接口
Comparable接口是一个泛型接口,当我们代码中的某些对象需要排序的时候,就可以通过实现该接口,重写其compareTo方法,来实现对于集合或数组中对象的比较,之后我们便可以使用Collections.sort或者Arrays.sort方法进行自动排序。
三、int compareTo(E e)方法
比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
注意:如果两个比较的对象的类型不匹配,该方法会抛出ClassCastException异常。
package Comparable接口;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
public class Fruits implements Comparable<Fruits>{
private int id;
private String name;
private String color;
public Fruits(int id, String name, String color) {
super();
this.id = id;
this.name = name;
this.color = color;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
@Override
public String toString() {
return "Fruits [id=" + id + ", name=" + name + ", color=" + color + "]";
}
@Override
public int compareTo(Fruits o) {
if(this.id>o.id) {
return 1;
}else if(this.id<o.id) {
return -1;
}else {
return 0;
}
}
public static void main(String[] args) {
List<Fruits> list=new ArrayList<>();
list.add(new Fruits(2,"pear", "yellow"));
list.add(new Fruits(4,"watermelon", "green"));
list.add(new Fruits(1,"cherry", "red"));
list.add(new Fruits(3,"apple", "red"));
Collections.sort(list);
Iterator<Fruits> it = list.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
}