Map是通过键值对存储的,键必须是唯一的,可以有一个null键,值是可以重复的,可以有多个null值。
HashMap实现Map接口,也是键值对形式存储的。HashMap存储数据时,通过唯一的键生成唯一的hashcode值,去存储value值。当HashMap通过键获取值的时候,速度是很快的。HashMap不支持线程的同步。如果需要实现同步,可以使用Collections的synchronizedMap方法,或者使用ConCurrentHashMap。
HashTable和HashMap是类似的,它继承Dictionary类。但是它不允许键和值为null,它支持线程的同步,这就导致,一个时间点,只能有一个线程操作这个HashTable,所以HashTable的效率很低。
LinkedHashMap是有序的,在用Iterator遍历LinkedHashMap的时候,先插进去的,先取出来。一般情况下,HashMap的遍历速度大于LinkedHashMap的遍历速度。但是有一种另外的情况,当HashMap的容量很大,但是存储的数据量很小,LinkedHashMap的存储的数据量很小,任意容量的时候,HashMap的遍历速度可能小于LinkedHashMap的遍历速度。LinkedHashMap的遍历速度和它存储的数据量有关,HashMap的遍历速度和它的存储的容量有关。
TreeMap实现了SortMap接口,它里面的数据按照键实现了升序排序,也可以自定义排序,使用Iterator遍历TreeMap的时候,取出来的数据是排序后的数据。