Comparable和Comparator的是使用

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。

------------------------------------------

如有错误,还请大侠及时指出,多谢~

------------------------------------------

猜你喜欢

转载自blog.csdn.net/qq_36819098/article/details/79804388
今日推荐