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接口属于临时性的比较

  • 相关阅读:
    Python数据分析的几种绘图方式——数据可视化(附源码)
    Python GUI项目实战:主窗体的界面设计与实现
    Python Scrapy框架:数据爬取全流程
    python来爬取煎蛋网随手拍小姐姐图片
    有意思的逻辑小练习:函数做参数进行传递
    python值*args和**kwargs的总结思考
    数据类型的基础知识补充,字典的并交集、空集合、可作为字典元组的元素、删除字典中的元素
    python里面为什么shell和保存文件运行结果不一样的相关思考(内存相关)
    代码:购物车(待修改)
    python里面为什么shell和保存文件运行结果不一样?
  • 原文地址:https://www.cnblogs.com/liuhuan425/p/10853972.html
Copyright © 2011-2022 走看看