Java中Comparable和Comparator的区别
Comparable:
Comparable
定义在java.lang
包里,意味着可以被比较的能力,因此某个类想要可以被排序,被比较大小,需要实现这个接口
public interface Comparable<T> {
public int compareTo(T o);
}
Comparable测试代码:
- 1、实现Comparable接口的Girl类
package comparabletest;
public class Girl implements Comparable<Girl>{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Girl(String name, int age) {
this.name = name;
this.age = age;
}
/**
* 重写方法,自定义排序的策略
* @param o
* @return
*/
@Override
public int compareTo(Girl o) {
return this.age -o.age;
}
@Override
public String toString() {
return "Girl{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
- 2、测试类
package comparabletest;
public class TestGirl {
public static void main(String[] args) {
Girl girl1 = new Girl("A", 20);
Girl girl2 = new Girl("B", 15);
System.out.println(girl1.compareTo(girl2));
}
}
Comparator:
Comparator
定义在java.util
包中,代表着一个角色,这个角色的功能是对传入的两个元素进行大小的比较,并且返回结果.
public interface Comparator<T> {
int compare(T o1, T o2);
}
Comparator 测试代码:
- 1、正常的Girl类
package comparatortest;
public class Girl {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Girl(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Girl [name=" + name + ", age=" + age + "]";
}
}
- 2、实现外部的Comparator接口的类:
package comparatortest;
import java.util.Comparator;
public class GirlComparator implements Comparator<Girl> {
/**
* 重写这个方法:自定义比较策略--年龄比较大的就比较大
* @param o1
* @param o2
* @return 比价值 大于0:o1比o2大 小于0:o1比o2小
*/
@Override
public int compare(Girl o1, Girl o2) {
return o1.getAge() - o2.getAge();
}
}
- 3、测试类:
package comparatortest;
public class GirlTest {
public static void main(String[] args) {
Girl girl1 = new Girl("A", 20);
Girl girl2 = new Girl("B", 15);
GirlComparator girlComparator = new GirlComparator();
int compare = girlComparator.compare(girl1, girl2);
System.out.println(compare);
}
}
Comparable和Comparator的主要区别在于:
(1).Comparable和Comparator 和 都是Java中的内部比较器接口,都是用来实现对一个自定义的类进行排序
(2). 不同的是实现Comparable接口是定义在类的内部,比较代码需要嵌入类的内部结构中
(3). Comparator 实现在类的外部,单独实现第一个比较器,不需要对原来的类进行结构上的变化,属于无侵入式的。