哈希计算方法不同
hashmap:HashMap计算hash对key的hashcode进行了二次hash,以获得更好的散列值,然后对table数组长度取模。
hashtable:Hashtable计算hash是直接使用key的hashcode对table数组的长度直接进行取模。
键值是否可以为空值
hashmap:HashMap可以使用null作为key,不过建议还是尽量避免这样使用。HashMap以null作为key时,总是存储在table数组的名列前茅个节点上。
hashtable:Hashtable则不允许null作为key
初始化容量不同
hashmap:HashMap 的初始容量为:16。
hashtable:Hashtable 初始容量为:11。
两者的负载因子默认都是:0.75
同步性不同
hashmap:HashMap是一个不同步的Map
,这意味着HashMap是线程不安全
的,如果没有适当的同步代码,则无法在多个线程之间共享。
hashtable:Hashtable是一个同步的Map
,Hashtable是线程安全的,可以在多个线程之间共享。如果您需要使用同步的 Map,Hashtable 比在同步包装器中使用 HashMap 更快。
性能不同
由于HashMap不是同步的Map,因此在性能方面它比Hashtable更快,更好,实际上,它比Hashtable使用更少的内存。虽然它们实际上是相同的,但Hashtable比HashMap慢一点,但比同步的HashMap快一点。从本质上讲,将 Hashtable 与多线程访问结合使用是不安全的,因为只有方法是同步的。Hashtable是HashMap的同步对应物。与同步对象相比,非同步对象的性能更好,就像 Hashtable 在单线程环境中的性能更好一样。
网友评论