Comparable介绍
实现了Comparable接口的类,能够进行排序比较。该排序的实现,是由程序员自定义排序规则,实现compareTo方法。compareTo方法返回int类型的整数,一下分为3种情况:
- 比较者(当前对象)比被比较者大,则返回一个正数。
- 比较者与被比较者相等,返回0。
- 比较者比被比较者小,返回一个负数。
其代码实现如下
public class Domain implements Comparable<Domain>
{
private String str;
public Domain(String str)
{
this.str = str;
}
public int compareTo(Domain domain)
{
if (this.str.compareTo(domain.str) > 0)
return 1;
else if (this.str.compareTo(domain.str) == 0)
return 0;
else
return -1;
}
public String getStr()
{
return str;
}
}
Comparator介绍
Comparator也是一个比较接口,如果某个类需要排序,而类本身又不支持排序(没有实现Comparable接口),这种情况下,我们就可以实现compare方法,来实现排序,compare方法有两个参数,分别为要比较的两个对象,返回类型也是int类型,有一下三种情况:
1.如果o1>o2,则返回正数。
2.如果o1=o2,则返回0。
3.如果o1<o2,则返回负数。
代码实现如下,
public class DomainComparator implements Comparator<Domain>
{
public int compare(Domain domain1, Domain domain2)
{
if (domain1.getStr().compareTo(domain2.getStr()) > 0)
return 1;
else if (domain1.getStr().compareTo(domain2.getStr()) == 0)
return 0;
else
return -1;
}
}
二者的区别
从上面不难看出,实现Comparable接口排序要比实现Comparator接口排序耦合度要高,因为如果要更改comparTo方法,就会变动实现类,而对于Comparator来说,只需要更改比较器类。实现compareTo方法的比较可以称为内比较,实现了compare的方法可以称为外比较,因此需要在适合场合选择合适的方法。