zoukankan      html  css  js  c++  java
  • Comparable和Comparator

    一、Comparable比较类:

    1.为什么需要这个类:

    java中的对象,正常情况下,只能进行比较:== 或 !=,不能使用<、>来进行比较。但是在实际开发中,又需要对多个对象进行排序,言外之意,就需要比较对象的大小。所以就要通过两个定义的接口之一来实现:Comparable或Comparator

    2.Coparable接口的使用:

    ①像String、包装类等实现了Comparable接口,重写了compareTo(obj)方法,给出了比较两个对象的方式。

    ②像String、包装类重写了compareTo()方法后。进行了从小到大的排列。

    ③重写compareTo(obj)的规则:

    • 如果当前对象this大于形参对象obj,则返回正整数。
    • 如果当前对象this小于形参对象obj,则返回负整数。
    • 如果当前对象this等于形参对象obj,则返回零。

    代码如下:

    public class Comeper {
        @Test
        public void tests(){
            String[] arr = new  String[]{"AA","BB","CC","GG","DD"};
            Arrays.sort(arr);
            System.out.println(Arrays.toString(arr));
        }//结果就是AA,BB,CC,DD,GG

    ④对于自定义类来说,如果需要排序,可以让自定义类实现Comparable接口,重写ComparaTo()。

    代码如下:

        @Override
        public int compareTo(Object o) {//按照价格排序重写
            if (o instanceof Plan){
                Plan gg = (Plan)o;
                if (this.price > gg.price){
                    return 1;
                }else if (this.price < gg.price){
                    return -1;
                }else {
                    return 0;
                }
    
            }
            throw new RuntimeException("传的什么值,不能比!");
        }
    
    //toString重写省略
    @Test
        public void teste(){
        Plan[] miaosha = new Plan[4];
        miaosha[0] = new Plan("dell",2500);
        miaosha[1] = new Plan("hesisi",3600);
        miaosha[2] = new Plan("motelola",200);
        miaosha[3] = new Plan("apple",8000);
        Arrays.sort(miaosha);
            System.out.println(Arrays.toString(miaosha));
        }

    二、Comparator接口的使用:定制排序

    适用场景:当元素的类型没有实现java.lang.Comparable接口又不方便修改代码,或者实现了java.lang.Comparable接口的排序规则不适合当前的操作,那么可以考虑使用Comparator的对象来排序。

     @Test
        public void teset(){
            String[] arr = new  String[]{"AA","BB","CC","GG","DD"};
            Arrays.sort(arr, new Comparator() {//匿名实现类对象
                @Override
                public int compare(Object o1, Object o2) {
                    if (o1 instanceof String && o2 instanceof String){
                        String ww = (String)o1;
                        String ss = (String)o2;
                        return -ww.compareTo(ss);
                    }
                    throw  new RuntimeException("类型错误!");
                }
            });
            System.out.println(Arrays.toString(arr));
        }

    三、Comparable接口和Comparator的使用比较对比:

    Comparable接口的方式一旦一定,保证Comparable接口实现类的对象在任何位置都可以比较大小

    Comparator接口属于临时性的比较

  • 相关阅读:
    STL++?pb_ds平板电视初步探索
    STL二分查找函数的应用
    线性DP LIS浅谈
    Manacher算法(马拉车算法)浅谈
    KMP瞎扯一下
    2018/11/9 周五集训队第四次测试赛补题题解
    洛谷P1294 高手去散步
    差分数组浅谈
    树状数组浅谈
    plugins标签:分页助手PageHelper的实现
  • 原文地址:https://www.cnblogs.com/liuhuan425/p/10853972.html
Copyright © 2011-2022 走看看