一、需求: 定义一个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}