可能重复:
Java: What is the difference between implementing Comparable and Comparator?
When to use Comparable vs Comparator
可比较和比较器接口之间有什么区别? 有人可以通过提供相应的示例来解释我吗?
谢谢
答案 0 :(得分:3)
这就是拇指规则:
Comparable
接口以提供自然顺序。Comparator
,根据您希望的标准对对象集合进行排序。 所以你有
注意:以下代码仅用于说明目的,可能无法编译。
public class Student implements Comparable<Student>{
public int age;
public String name;
//defined natural ordering is by name
public int compareTo(Stundent that){
return this.name.compareTo(that.name);
}
}
public class AgeComparator implements Comparator<Student>{
int compare(Student s, Student t){
return s.age - t.age;
}
}
现在,如果您有Student
的列表,例如studentList
,则可以使用以下
Collections.sort(studentList); //sorts by natural ordering; by name
Collections.sort(studentList, new AgeComparator()); //sorts by age
答案 1 :(得分:0)
来自Comparable
上的Java文档:
此接口对实现它的每个类的对象强加一个总排序。这种排序称为类的自然排序,类的
compareTo
方法称为自然比较方法。
换句话说,实现Comparable
的类能够将自己与同类的其他对象进行比较。
来自Comparator
上的Java文档:
比较函数,它对某些对象集合强加
total ordering
。比较器可以传递给排序方法(例如Collections.sort
或Arrays.sort
),以便精确控制排序顺序。比较器还可用于控制某些数据结构的顺序(例如sorted sets
或sorted maps
),或者为没有natural ordering
的对象集合提供排序。
实现Comparator
的类能够将其他对象相互比较。
答案 2 :(得分:0)
对于Comparable<T>
,具有T
类型的对象自然排序。给定T that
,它确定<
和=
之间的关系(>
,this
或that
)。
Comparator<T>
是T
的排序。给定两个T
,它确定了它们的关系(<
,=
或>
)。
自然排序类型的示例是Integer
。整数的自然顺序为{-MAX_VALUE
,...,-1
,0
,1
,...,MAX_VALUE
}。一个类型只能有一个自然顺序,部分原因是自然顺序的概念需要它是唯一的,部分原因是单个类不能有多个Comperable.compareTo
的实现。
另一方面,单个类型可能有几个有意义的Comparator
个。例如,String.CASE_INSENSITIVE_ORDER
是一个忽略大小写的Comparator<String>
。