Comparable和Comparator的都可以实现同类的实例对象的比较,但注重点稍微有点不同。
----------------举个栗子----------------
有一个A类,A类的两个实例变量a1和a2,现在让a1和a2进行自定义的比较,方式如下:
/**
* 这是让A类具有比较的功能
*/
class A implements Comparable<A> {
private String val;
public A(String val) {
this.val = val;
}
@Override
public String toString() {
return "A{" + "val='" + val + '\'' + '}';
}
@Override
public int compareTo(A otherA) {
if (this.val.compareTo(otherA.val) > 0) {
return 1;
} else if (this.val.compareTo(otherA.val) == 0) {
return 0;
} else {
return -1;
}
}
public String getVal() {
return val;
}
}
上面是让A类实现comparable接口,重写compareTo()方法就可以让a1与a2进行比较。
下面是测试
public static void main(String[] args) {
A a1 = new A("a");
A a2 = new A("b");
A a3 = new A("b");
A a4 = new A("c");
System.out.println(a2.compareTo(a1)); //结果是1
System.out.println(a2.compareTo(a3)); //结果是0
System.out.println(a2.compareTo(a4)); //结果是-1
}
花了一些时间,终于让类A具有比较的功能了,
那么,上面是类A的一种比较方式,
如果类A的比较方式不止一种,不同情况下,用不同的方式来比较A,这该咋办捏?
现在就该使用Comparator这个接口了,可以定义一个专门用来比较A的比较器。每次要比较A的时候就创建一个有比较A的功能的比较器AComparator,把要比较的A实例对象传递给这个AComparator,这样就可以应对多种情况下对A进行不同方式比较了。
详细情况如下:
/**
* 这是专门用来比较A的比较器
*/
class AComparator1 implements Comparator<A> {
@Override
public int compare(A a1, A a2) {
if (a1.getVal().compareTo(a2.getVal()) > 0) {
return 1;
} else if (a1.getVal().compareTo(a2.getVal()) == 0) {
return 0;
} else {
return -1;
}
}
}
//这是比较A的第二种方式
class AComparator2 implements Comparator<A> {
@Override
public int compare(A a1, A a2) {
//这里写上另一种比较A的方式
//..........为了方便,这里就直接返回0了。
return 0;
}
}
下面进行测试一把
public static void main(String[] args) {
A a1 = new A("a");
A a2 = new A("b");
A a3 = new A("b");
A a4 = new A("c");
AComparator1 aComp1 = new AComparator1();
System.out.println(aComp1.compare(a2, a1)); //结果是1
System.out.println(aComp1.compare(a2, a3)); //结果是0
System.out.println(aComp1.compare(a2, a4)); //结果是-1
AComparator1 aComp2 = new AComparator1();
System.out.println(aComp2.compare(a2, a1));
System.out.println(aComp2.compare(a2, a3));
System.out.println(aComp2.compare(a2, a4));
}
好了,该总结一下了,看的我很茫然啊{-_-}{-_-}{-_-}{-_-}
Comparator:如果要进行比较的类在不同的情况下要用不同的方式进行比较,这时候就可以考虑让类实现Comparator接口了。这通常会联系到一种常见的设计模式—策略模式。
Comparable:让类有一种可以进行比较的方式,耦合度比上面的高。实现起来也简单。
嗯~~~~,先总结到这吧,先想想清明出去怎么玩,和一个安阳的兄dei。
------------------------------------------
如有错误,还请大侠及时指出,多谢~
------------------------------------------