1. 同步性



HashTable中所有的方法都是加了synchronize关键字,线程是同步的,所以每次调用方法都需要排队,效率非常低!!一般多线程情况下 用的是ConcurrentHashMap,因为它是对方法内部的局部代码块进行同步(也就是分块同步),效率远大于HashTable
2. 对null key和null value的支持不同


如图HashMap在计算 key的哈希值时,如果key为null默认为0,否则是当前key的哈希值和自己的高十六位进行与运算(因为int为32位,高,低十六都参与运算可以使得哈希散列更加均匀)。HashTable在传入Key和Value时,key和value为空都会抛出空指针异常。因为空指针不能调用方法。
3.初始值和扩容方式不同




HashMap的初始容量是16,而HashTable是11。当都达到阈值时(容量*负载因子) HashMap以2的倍数进行递增,而HashTable是以2的倍数+1扩容。
4.计算哈希值的方法不同


HashMap是key为null时,哈希值为0,否则为key的哈希值与上自己的高16位。而HashTable是直接获取到key的哈希值
5. 数组中角标的位置的计算不同


HashMap中通过数组的长度减一与上哈希值,而Hashtable是通过去掉符号位对数组长度进行取模运算
6. HashMap是在put操作时才创建的数组(防止内存浪费),而HashTable是在构造函数初始化时就创建了数组


相关文章: