一日总结 0107

关于 自然排序 与定制排序

应用场景。

这些商品就是一个个的对象,我们将它按照不同属性排序。比如说价格,销量或者评价等等。
在代码中我们声明为一个商品类,属性有价格和品牌
这里只保留了compareTo方法的重写,在compareTo方法中声明排序规则。这里是对价格进行排序,若相同则比较品牌名字。其中name是String类型,它本身已经重写compareTo方法。

public class Goods implements Comparable{
    
    
    private double price;
    private String name;
    @Override
    public int compareTo(Object o) {
    
    
        if(o instanceof Goods){
    
    
            Goods goods=(Goods)o;
            if(this.price<goods.price){
    
    
                return -1;
            }else if(this.price> goods.price){
    
    
                return 1;
            }else{
    
    
                return this.name.compareTo(((Goods) o).name);
            }
        }
        throw new RuntimeException("类型异常");
    }
}

在另一个测试类中,代码如下

    @Test
    public void test(){
    
    
        Goods goods[] =new Goods[5];
        goods[0] =new Goods(13,"logic");
        goods[1] =new Goods(18,"dell");
        goods[2] =new Goods(45,"mi");
        goods[3] =new Goods(36,"huawei");
        goods[4] =new Goods(36,"meizu");

        Arrays.sort(goods);
        System.out.println(Arrays.toString(goods));
    }

其中Arrays是一个工具类,其中包含了各种静态方法,可用来操作Array。Array是集合的一种,实现类包括ArrayList,LinkedList,Vactor。

若我们不想使用某一个类的排序规则,或者对String默认的compareTo方法不满意,可以通过定制排序来满足我们的需求。
定制排序的方法是,声明一个comparator比较器(定义排序规则),使用.sort(arr,comparator)的构造器,

Arrays.sort(goods, 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("类型错误");
            }
        });

这次是对名称进行比较,若相同则对价格进行比较。

猜你喜欢

转载自blog.csdn.net/weixin_45828966/article/details/112325341