集合之TreeMap案例

本文探讨如何使用TreeMap来存储书籍及其出版日期,并通过日期进行排序。文章通过三种不同的实现方式,详细展示了如何创建和操作TreeMap,以满足书籍按出版日期排序的需求。

一、需求: 定义一个TreeMap,键存储的是书对象,值存储的是字符串。 根据书的出版日期排序。

二、代码实现:
方式一(错误):

方式二:

class Book implements Comparable<Book> {
    String name;
    String date; //出版日期 

    public Book(String name, String date) {
        super();
        this.name = name;
        this.date = date;
    }

    //String类实现了Comparable接口,已经重写了compareTo()方法
    //所以此处直接使用String类中的compareTo()方法的返回值,
    //作为自定义类Book的compareTo()方法的返回值
    public int compareTo(Book o) {
        return this.date.compareTo(o.date);
    }

    public String toString() {
        return "[书名:"+name+",日期:"+date+"]";
    }
}

public class Demo2 {

    public static void main(String[] args) {

        TreeMap<Book, String>  map = new TreeMap<Book, String>();  //值存储书名
        map.put(new Book("斗破苍穹","2009-12-11"), "001");
        map.put(new Book("武动乾坤","2014-2-21"), "002");
        map.put(new Book("大主宰","2017-8-30"), "003");
        System.out.println(map);
    }

}

//运行结果为:
//{[书名:斗破苍穹,日期:2009-12-11]=001, [书名:武动乾坤,日期:2014-2-21]=002, [书名:大主宰,日期:2017-8-30]=003}

方式三:

class Book2 implements Comparable<Book2> {

    String name;
    String date; //出版日期 

    public Book2(String name, String date) {
        super();
        this.name = name;
        this.date = date;
    }

    //先把字符串的日期转换为Date对象,然后在使用Date对象进行比较
    public int compareTo(Book2 o) {
        //日期格式化类
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        //使用日期格式化类把字符串转换成Date对象
        Date date1 = null;
        Date date2 = null;
        try {
            date1 = dateFormat.parse(this.date);
            date2 = dateFormat.parse(o.date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        //形式1:return (int) (date1.getTime()-date2.getTime());
        //形式2:Date类也实现了Comparable接口,所以也可以使用Date类重写好的CompareTo()方法
        return date1.compareTo(date2);
    }

    public String toString() {
        return "[书名:"+name+",日期:"+date+"]";
    }

}

public class Demo3 {

    public static void main(String[] args) {

        TreeMap<Book2, String>  map = new TreeMap<Book2, String>();  //值存储书名
        map.put(new Book2("斗破苍穹","2009-12-11"), "001");
        map.put(new Book2("武动乾坤","2014-02-21"), "002");
        map.put(new Book2("大主宰","2017-08-30"), "003");
        System.out.println(map);

    }

}

//运行结果为:
//{[书名:斗破苍穹,日期:2009-12-11]=001, [书名:武动乾坤,日期:2014-02-21]=002, [书名:大主宰,日期:2017-08-30]=003}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值