哈希表由数组+链表组成,一个长度为16的数组中,每一个元素存储的是一个链表的头结点。而HashMap和Hashtable就是哈希表结构。数组
HashMap和HashTable
数组的存储空间是连续的,占用内存严重,故空间复杂度很大,可是查找时间复杂度较小。数组的特色:寻址容易,插入和删除困难。
链表的存储空间是离散的,占用内存比较宽松,故空间复杂度较小,但查找时间复杂度较大。链表的特色:寻址困难,插入和删除容易安全
1 继承类不一样:
A.HashMap继承AbstractMap
B.Hashtable继承Dictionary线程
2 执行效率不一样:
A.HashMap是非线程安全的,是Hashtable的轻量级实现,效率较高
B.Hashtable是线程安全的,效率较低继承
3 put方法对key和value的要求不一样
A.HashMap容许Entry的key或value为null
B.Hashtable不容许Entry的key或value为null,不然出现NullPointerException 内存
4有无contains方法
A.HashMap没有contains方法
B.Hashtable有contains方法同步
注意:Hashtale是Syncchronize的,而HashMap是Asyncchronize的,当多个线程访问Hashtable时,Hashtable不须要本身为它的方法实现同步;而当多个线程访问HashMap时,须要经过Collections.synchronizedMap来同步HashMapio