相同点:
1、 底层数据结构都为:数组+链表
2、key值都不可以重复,如果有相同的key,替换其原有位置的value值
3、插入元素都不能保证插入有序
4、都是先通过键值对的key获得相对应的哈希值,然后找到数组的索引位置,遍历链表
5.共同实现接口:Map<K,V>; Cloneable; java.io.Seriliable;
6.默认扩容加载因子都为0.75
不同点:
1、继承关系不同,HashTable继承自Dictionary,HashMap继承自AbstractMap
2、初始容量默认值不同:HashTable的初始容量为11,HashMap的初始容量为16
3、能否存储null值问题:HashTable的key和value都不能为null,put方法下key、value都不能为null,为null则会抛出空指针异常。HashMap的key和value都可以为null,put方法下对key为null不为null分别进行处理。
4、线程安全性问题:HashTable是线程安全的,HashMap是非线程安全的
5、哈希算法不同
6、扩容大小不同:HashTable是按照2*oldlength+1 进行扩容;HashMap是按照2*oldlength即指数扩容