1.Hashtable是个线程安全的类(HashMap线程安全) 使用同步代码块控制;
2.Hasbtable并不允许值和键为空(null),若为空,会抛空指针(HashMap可以);
3.Hashtable不允许键重复,若键重复,则新插入的值会覆盖旧值(同HashMap);
4.Hashtable同样是通过链表法解决冲突;
5.Hashtable根据hashcode计算索引时将hashcode值先与上0x7FFFFFFF,这是为了保证hash值始终为正数;
6.Hashtable的容量为任意正数(最小为1),而HashMap的容量始终为2的n次方。Hashtable默认容量为 11,HashMap默认容量为 16;
7.Hashtable每次扩容,新容量为旧容量的2倍加1,而HashMap为旧容量的2倍;
8.Hashtable和HashMap默认负载因子都为0.75;
9..HashTable使用Enumeration进行遍历;HashMap使用Iterator进行遍历。
10.哈希值的使用不同,HashTable直接使用对象的hashCode; HashMap重新计算hash值,而且用与代替直接求模
关于hashMap 参考博客
http://zhangshixi.iteye.com/blog/672697
add过程 hashcode ————》调用HashMap 的hash方法——》调用forIndex 方法(确定index位置,使用的高效与运算代替取模) ————》判断是否有hash冲突,没有hash冲突讲键值对直接放在index 位置,有冲突把键值对放在链表头部,next指向之前的头部。