Java比较器(对象排序)

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比较器(对象排序))