Comparable和Comparator的使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

写这篇文章的原因是前一晚参加字节笔试的时候,有道题目需要先对给定的数据进行自定义排序,再进行后面的操作,然而我已经有了大致的思想,就是不会排序,所以只能放弃,有点可惜。所以在这里写一篇文章记录一下Comparable和Comparator.

一、Comparable是什么

Comparable是一个接口,可以用类去实现该接口,并且要在该类中重写compareTo()方法,那么这个类就可以拥有一个自定义的排序了。
代码如下

import java.util.*;
import java.lang.Comparable;
public  class Main
{
    public static void main(String[] args)
    {
        // 新建ArrayList(动态数组)
        ArrayList<Student> list = new ArrayList<Student>();
        // 添加对象到ArrayList中
        list.add(new Student("ccc", 20));
        list.add(new Student("AAA", 30));
        list.add(new Student("bbb", 10));
        list.add(new Student("ddd", 40));

        for (int i = 0; i < list.size(); ++ i) System.out.print(list.get(i).name + " ");
        Collections.sort(list);
        System.out.println();
        for (int i = 0; i < list.size(); ++ i) System.out.print(list.get(i).name + " ");
    }
    private static class Student implements Comparable<Student>
    {

        int age;
        String name;
        public Student(String name, int age)
        {
            this.name = name;
            this.age = age;
        }
        public int compareTo(Student o)
        {
            return name.compareTo(o.name);
        }
    }
}

输出结果如下
在这里插入图片描述

另外如果compareTo方法中,如果写的是age.compareTo(o.age)会报错,我认为可能是只支持引用数据类型,不支持基本数据类型吧。

二、使用Comparator

Comparator是一个比较器,需要实现的方法是compare方法即可,以下我用匿名类实现了。
代码如下:

import java.util.*;
import java.lang.Comparable;
public  class Main
{
    public static void main(String[] args)
    {
        List<int[]> map = new ArrayList<int[]>();
        map.add(new int[]{8, 10});
        map.add(new int[]{9, 11});
        map.add(new int[]{15, 16});
        map.add(new int[]{14, 15});
        map.add(new int[]{10, 12});
        for (int[] arr : map) System.out.print(arr[0] + " ");
        System.out.println();
        Collections.sort(map, new Comparator<int[]>()
        {
            public int compare(int[] o1, int[] o2)
            {
                return o1[0] - o2[0];
            }
        });
        for (int[] arr : map) System.out.print(arr[0] + " ");
        System.out.println();
    }
}

根据第一个值来排序,输入结果如下:
在这里插入图片描述

总结

首先Comparable是接口,Comparator是比较器;
其次:实现前者需要实现compareTo()方法,实现后者需要实现compare()方法。
最后两者比较的时候,返回负数则按升序,正数则降序,总得来说,如果你想要升序排序,就用对象1减去对象2,降序用对象2-对象1即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值