Hashtable、HashMap、TreeMap 三个类均实现Map接口。安全
Hashtable、HashMap、TreeMap 三个类均存储Key、Val键值对。键不可重复,且键只能对应一个Val信息。多线程
HashTable
对应存储(Key、Val)不容许为空。以下图所示:
函数
HashMap
对应存储(Key、Val)容许为空,Key有且只能有一个null,Val不限定null的数量。当key重复后,后面存储的键值对就会替换以前的键值对。以下图所示:
spa
TreeMap
对应存储(Key、Val)时,Key不容许为空。以下图所示:
线程
HashTable 、HashMap
对应存储的(Key、Val)是无序存储。以下图所示:
对象
TreeMap
对应存储的(Key、Val)是有序存储,由于TreeMap实现SortedMap接口,默认为生序排序,且内部实现排序为红黑树排序。(红黑树排序为树中任何一个节点均比左子树中全部节点都大于或等于,均比右子树中全部节点都小于或等于)。以下图所示:
排序
HashTable
初始化时,若没有指定大小,默认存储空间为11。(JDK源代码)以下图所示:
接口
HashMap
初始化时,若没有指定大小,默认存储空间为16。(JDK源代码)以下图所示:
get
HashTable
HashTable类中函数均为同步函数,在函数前增长(synchronized关键字),所以保证了线程安全性。可是在多线程下,处理效率表现低下。当一个线程进行put操做时,其余线程就算是get操做,也须要等待锁释放后才能够进行操做。(不推荐在程序中使用)同步
HashMap HashMap类中函数均为非同步函数,在同一时刻能够由多个线程同时进行写操做,所以不能保证了线程安全性。若是须要同步,推荐使用ConcurrentHashMap,此类中函数支持同步。与HashTable区别在于,HashTable锁是对象级别,而ConcurrentHashMap是分段锁,当一个线程进行写操做时,其余线程能够读取其余段上数据信息。ConcurrentHashMap不只保证了多线程的安全性,并且从效率上也有很明显的提高。(推荐在程序中使用)