Java中 compareable 内部比较器和comparator 外部比较器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qichangjian/article/details/86661651

Java中比较器比较简单,我们就不过多的讲解,直接上代码来对比compareable 内部比较器和comparator 外部比较器。

内部比较器实现:

import lombok.AllArgsConstructor;
import lombok.Data;

/**
泛型代表比较的对象
 同种类型的对象才具有比较能力

 内部比较器:Comparable<Student>实现comapreTo方法
 */
@Data
@AllArgsConstructor
public class Student implements Comparable<Student>{
    private String name;
    private int age;

    /**
     * @return 返回值的的三种类型
     *  >0  本对象往后窜(移动)
     *  <0  位置不变
     *  =0  本对象往前窜(移动)
     *
     * @param o  参数:用于比较的对象
     *    和本对象(this)比较
     */
    @Override
    public int compareTo(Student o) {
        return this.age - o.age;//升序
    }
}

外部比较器实现

import lombok.AllArgsConstructor;
import lombok.Data;

@Data
@AllArgsConstructor
public class Student2{
    private String name;
    private int age;
}
import java.util.Comparator;

/**
 * Student2外部比较器Comparator 实现compare
*/
public class MyCom implements Comparator<Student2> {
    @Override
    public int compare(Student2 o1, Student2 o2) {
        return o1.getAge() - o2.getAge();
    }
}

测试类:

import java.util.ArrayList;
import java.util.Collections;

/**
 * 比较器的使用
 *    compareable 内部比较器
 *           如果一个类实现了这个接口,代表这个类具备了比较的能力
 *           实现compareTo
 *    comparator 外部比较器
 *          专门定义一个比较器的类,类中去定义比较规则
 *           实现compare
 */
public class testSort {
    public static void main(String[] args) {
        //1.string排序
        /*ArrayList<String> list = new ArrayList<>();
        list.add("a");
        list.add("n");
        list.add("v");
        list.add("b");
        list.add("c");
        System.out.println(list);
        Collections.sort(list);//排序
        System.out.println(list);*/

        //2.内部比较器
        ArrayList<Student> list = new ArrayList<>();
        list.add(new Student("zs1",19));
        list.add(new Student("zs2",29));
        list.add(new Student("zs3",10));
        list.add(new Student("zs4",23));
        list.add(new Student("zs5",8));
        System.out.println(list);
        //只要调用排序的方法,必须具有排序的能力,否则无法编译通过
        //解决方法:实现Comparable接口  ...ble使..具有..能力
        Collections.sort(list);
        System.out.println(list);

        //3.外部比较器
        ArrayList<Student2> list2 = new ArrayList<>();
        list2.add(new Student2("zs1",19));
        list2.add(new Student2("zs2",29));
        list2.add(new Student2("zs3",10));
        list2.add(new Student2("zs4",23));
        list2.add(new Student2("zs5",8));
        System.out.println(list2);
        MyCom myCom = new MyCom();
        Collections.sort(list2,myCom);
        System.out.println(list2);

    }
}
注意:因为引入了 lombok,所以maven中需要有lombok坐标

Maven pom.xml:

<dependencies>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.4</version>
        </dependency>
    </dependencies>

猜你喜欢

转载自blog.csdn.net/qichangjian/article/details/86661651