import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TreeMap;
/* * 双列集合:
* 在现实生活中,有些关系是以映射的形式成对存在的。 *
* ----|Map 实现了Map接口的类,特点是存储的数据都是以键值对的形式存储的。
* ------|HashMap底层也是基于Hash表实现的
* ------|TreeMap 基于二叉树的数据结构实现的,会对元素的键进行排序存储
* ------|HashTable 底层依赖于Hash表实现的,与HashMap实现一致的,但是HashTable是线程安全的,效率没有HashMap高 *
* HashMap * 存储原理: 在HashMap添加元素的时候,首先调用键的hashCode方法得到元素的a哈希码值,然后经过一系列运算就可以得到 * 元素在hash表中的存储位置.可能的情况有两种:
* 1. 如果算出的位置没有任何元素的存储,那么该元素可以直接存储;
* 2. 如果算出的位置目前已经存在其他的元素,还会调用元素的equals方法进行比较,如果返回的是false,该元素允许被存储,如果 * 返回true,那么该元素不允许被存储。 *
* TreeMap * 注意事项: *
1. 往TreeMap天津元素的时候,如果键具备自然顺序,就可以安装键的自然顺序排序:
* 2. 如果TreeMap的元素无自然顺序的特性,那么键所属的类必须要实现Comparable接口,把键的比较规则定义在ComparaTo方法中。
* 3. 往TreeMap中添加元素,如果元素所属的类没有实现Comparable接口,并且元素不具备自然属性,那么可以出传入一个自定义比较器。 *
*/
class Book implements Comparable{
String name; //书名
String date; //日期
public Book(String name, String date){
this.name = name;
this.date = date;
}@Overridepublic int compareTo(Book o)
{// TODO Auto-generated method stub
//方法一:使用String方法的CompraT0方法
//return this.date.compareTo(o.date);
//方法二:使用Date类的CompareTo方法
SimpleDateFormat sdf = new SimpleDateFormat("yyyy--MM-dd");
Date date1 = null;
Date date2 = null;
try {
date1 = sdf.parse(this.date);
date2 = sdf.parse(o.date);
}
catch (ParseException e) {
// TODO Auto-generated catch blocke.printStackTrace();
}
return date2.compareTo(date1);
}
public String toString(){
return "["+ this.name + ","+ this.date +"]";
}
}
public class Demo1 {public static void main(String[] args){TreeMapm = new TreeMap();
m.put(new Book("浪潮之巅", "2012-11-05"), "10003");
m.put(new Book("数学之美", "2010-10-24"), "200001");
m.put(new Book("三体1", "2006-9-10"), "10001");
m.put(new Book("巨婴", "2013-7-01"), "100056");
System.out.println(m);
}
}