Java比较器

2021-04-13 21:27

阅读:675

标签:技术   形参   code   方便   整数   结果   数据   大于   实现   

Java比较器

Comparable接口(自然排序)

String、包装类等排序

像String、包装类等实现了Comparable接口,进而重写了compareTo()方法,给出了比较两个对象大小的方式(从小到大的排列)

  • compareTo(obj)重写规则
    • 如果当前对象this大于形参对象obj,则返回正整数
    • 如果当前对象this小于形参对象obj,则返回负整数
    • 如果当前对象this等于形参对象obj,则返回0

自定义类排序

对于自定义类来说,如果需要排序。可以让自定义类实现comparable接口,重写CompareTo(obj)方法

  • 在compareTo(obj)方法中指明如何排序
    • 首先判断数据是否可以转化为同一类型(数据类型转换)
    • 判断当前对象和形参对象数据大小关系
      • 如果当前对象this大于形参对象obj,则返回正整数
      • 如果当前对象this小于形参对象obj,则返回负整数
      • 如果当前对象this等于形参对象obj,则返回0

代码实现

按照年龄从小到大进行排列

public class Test {
    public static void main(String[] args) {
        Student[] arr = new Student[4];
        arr[0] = new Student("Tom",18,100);
        arr[1] = new Student("Jack",23,60);
        arr[2] = new Student("Ann",20,41);
        arr[3] = new Student("Lisa",21,82);

        Arrays.sort(arr);

        for (int i = 0; i  this.getAge()){
                return -1;
            }else if(s.getAge() 

运行结果

技术图片

Comparator接口(定制排序)

背景(以下情况使用Comparator接口)

  1. 当元素没有实现Comparable接口而又不方便修改代码
  2. 实现了Comparable接口的排序规则不适合当前操作

重写compare方法

重写compare(Object o1,Object o2)方法,比较o1和o2的大小

  • 如果o1大于o2,则返回正整数
  • 如果o1小于o2,则返回负整数
  • 如果o1等于o2,则返回0

String类重写

代码实现

public void test1(){
    String[] s = new String[]{"AA","YY","NN","EE","XX"};
    Arrays.sort(s, new Comparator() {
        @Override
        public int compare(Object o1 , Object o2) {
            if(o1 instanceof String || o2 instanceof String){
                String s1 = (String)o1;
                String s2 = (String)o2;

                if(s1.equals(s2)){
                    return 0;
                }else{
                    return - s1.compareTo(s2);
                    }
                }
            else{
                throw new RuntimeException("传入数据类型不一致");
            }
        }
    });

    System.out.println(Arrays.toString(s));
}

运行结果

技术图片

自定义类重写

代码实现

技术图片

Comparable接口和Comparator接口对比

  1. Comparable接口方式一旦指定,保证Compareable接口实现类在任何位置都可以比较大小
  2. Comparator接口属于临时性的比较,什么时候需要比较就临时创建一下

Java比较器

标签:技术   形参   code   方便   整数   结果   数据   大于   实现   

原文地址:https://www.cnblogs.com/CrabDumplings/p/13339146.html


评论


亲,登录后才可以留言!