java基础_比较器排序(Comparable和Comparator)

该博客展示了如何在Java中创建一个购物车类,并通过两种方式实现商品按价格和名字的排序。首先,通过实现Comparable接口使商品对象可以自我比较,进行升序排序。其次,使用匿名内部类和Comparator接口实现降序排序,当价格相同时,根据商品名字降序排列。
摘要由CSDN通过智能技术生成

创建一个购物车类,根据购物车的价格和名字排序。

方式一使用价格和名字升序 

  •    实现Comparable接口

方式二使用价格和名字降序

  •         匿名内部类Comparator
package com.Demo.exe1;

import java.util.Arrays;
import java.util.Comparator;

public class TestGoods {
    public static void main(String[] args) {
        Goods g1 = new Goods("红楼梦1", 100);
        Goods g2 = new Goods("红楼梦2", 100);
        Goods g3 = new Goods("红楼梦3", 300);
        Goods[] all = new Goods[3];
        all[0]=g2;
        all[1]=g1;
        all[2]=g3;
       Arrays.sort(all);
        System.out.println(Arrays.toString(all));
        System.out.println("=========");
        //第二种方式,使用匿名内部类
        //o1.getPrice()-o2.getPrice()为升序 或者  o2.getPrice()-o1.getPrice()为降序
        // 当o1.getPrice()=o2.getPrice()的时候比较书名字,根据书名降序排序
        Arrays.sort(all, new Comparator<Goods>() {
            @Override
            public int compare(Goods o1, Goods o2) {
                int num =(int) (o2.getPrice() - o1.getPrice())*1000;
                return num==0?o2.getName().compareTo(o1.getName()):num;
            }
        });
        System.out.println(Arrays.toString(all));
    }
}
//第一种方式实现Comparable接口
class Goods implements Comparable<Goods>{
    private String name;
    private double price;

    public Goods(String name, double price) {
        this.name = name;
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }


    //重写compareTo方法,this - o 是升序
    @Override
    public int compareTo(Goods o) {
        int i = (int) (this.price - o.price);
        return i==0?this.getName().compareTo(o.getName()):i;
    }


    @Override
    public String toString() {
        return "Goods{" +
                "name='" + name + '\'' +
                ", price=" + price +
                '}';
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值