美文网首页
Java比较器(对象排序)

Java比较器(对象排序)

作者: 阿豪puls | 来源:发表于2019-10-24 16:37 被阅读0次

    Java实现排序的方式

    • 自然排序:java.lang.Comparable
    • 定制排序:java.lang.Comparator

    自然排序

    应用场景

    1、Comparable接口强行对它的每一个子类进行整体排序,这种排序被称为类的自然排序(默认升序排序,从小到大)
    2、实现了Comparable接口的对象,可在任何位置进行排序比较,没有使用范围的局限性

    具体使用

    1、实现Comparable接口的子类,必须重写compareTo(Object obj)方法
    3、两个对象即通过compareTo(Object obj)方法的返回值来比较大小
    4、如果当前对象this大于形参对象obj,刚返回正整数,如果小于返回负整数,如果等于返回0
    5、对于实现过接口的子类,通过使用Collections.sort()或Arrays.sort()进行自动排序

    代码举例
      @Test
        public void test1(){
            String[] arr = new String[]{"AA","CC","KK","MM","GG","JJ","DD"};
            //
            Arrays.sort(arr);
    
            System.out.println(Arrays.toString(arr));
    
        }
    

    定制排序

    应用场景

    1、需要排序的对象,没有实现java.lang.Comparable接口又不方便修改代码时
    2、实现了自然排序,不满足业务需求时
    3、实现了Comparable接口的对象,更偏向于临时性排序输出

    具体使用

    1、实现Comparator接口,重写compare(Object obj1,Object obj2)方法,比较o1和o2的大小
    2、对于实现过接口的子类,通过使用Collections.sort()或Arrays.sort(),装载到容器中,进行定制排序

    代码举例
     @Test
        public void test4(){
            Goods[] arr = new Goods[6];
            arr[0] = new Goods("lenovoMouse",34);
            arr[1] = new Goods("dellMouse",43);
            arr[2] = new Goods("xiaomiMouse",12);
            arr[3] = new Goods("huaweiMouse",65);
            arr[4] = new Goods("huaweiMouse",224);
            arr[5] = new Goods("microsoftMouse",43);
    
            Arrays.sort(arr, new Comparator() {
                //指明商品比较大小的方式:按照产品名称从低到高排序,再按照价格从高到低排序
                @Override
                public int compare(Object o1, Object o2) {
                    if(o1 instanceof Goods && o2 instanceof Goods){
                        Goods g1 = (Goods)o1;
                        Goods g2 = (Goods)o2;
                        if(g1.getName().equals(g2.getName())){
                            return -Double.compare(g1.getPrice(),g2.getPrice());
                        }else{
                            return g1.getName().compareTo(g2.getName());
                        }
                    }
                    throw new RuntimeException("输入的数据类型不一致");
                }
            });
    
            System.out.println(Arrays.toString(arr));
        }
    

    相关文章

      网友评论

          本文标题:Java比较器(对象排序)

          本文链接:https://www.haomeiwen.com/subject/sutdvctx.html