概述
Comparable和Comparator都是java中关于排序的接口,主要功能为实现对元素的一个排序,实体类可以继承自这些接口,做一些简单的排序定义,但是实际使用起来还有一些区别
Comparable
接口方法的源码如图所示:
继承接口的类需要重写其中的compareTo方法,从而使得类是待排序的元素具有有序性,表示是一个可排序的元素
Comparator
接口的源码如图所示,是一个排序器,可以对泛型中的元素进行排序比较,提供了对泛型元素可排序的方法
代码展示
package demo02.lianshangshujujiegouhesuanfa.二叉搜索树.test;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class first {
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class girl implements Comparable<girl>{
private int age;
private String name;
private String monery;
@Override
public int compareTo(girl o) {
return this.age - o.getAge();
}
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class boy{
private int age;
private String name;
private String monery;
}
public static class ComparableTestData implements Comparator<boy> {
@Override
public int compare(boy o1, boy o2) {
return o2.getAge()-o1.getAge();
}
}
public static void test01(){
ArrayList<girl> lists = new ArrayList<>();
girl girl1 = new girl(1122,"453","234");
girl girl2= new girl(121,"453","234");
girl girl3 = new girl(112,"453","234");
girl girl4 = new girl(12322,"453","234");
girl girl5 = new girl(1123202,"453","234");
lists.add(girl1);
lists.add(girl2);
lists.add(girl3);
lists.add(girl4);
lists.add(girl5);
Collections.sort(lists);
lists.forEach(System.out::println);
}
public static void test02(){
ArrayList<boy> lists = new ArrayList<>();
boy first1 = new boy(1122,"453","234");
boy first2= new boy(121,"453","234");
boy first3 = new boy(112,"453","234");
boy first4 = new boy(12322,"453","234");
boy first5 = new boy(1123202,"453","234");
lists.add(first1);
lists.add(first2);
lists.add(first3);
lists.add(first4);
lists.add(first5);
Collections.sort(lists,new ComparableTestData());
lists.forEach(System.out::println);
}
public static void main(String[] args) {
//使用排序器
test02();
//将元素定义为可排序性
test01();
}
}