Comparator和Comparable的区别和使用

概述

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();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值