欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

HashMap和HashTable的异同点

程序员文章站 2022-05-03 08:07:18
...

不同点
1.实现的接口继承的类不同
hashmap:AbstractMap
hashtable:Dictionary(Enumerator 提供特有的key和value的遍历方式)

2.初始数组大小
hashmap:16
hashtable:11

3.线程安全性
hashmap:非线程安全(不安全在哪?)
hashtable:线程安全(Synchronize)

4.扩容方式:
hashmap:resize(2 * table.length);(2的指数)
hashtable:newCapacity = oldCapacity * 2 + 1

5.null值处理
HashMap允许key为null(前提:key不能重复),value可以有多个为null,注意:key为null特殊处理,table[0]
Hashtable不允许key和value为null
HashTable的Key不能为空,当用null当做Key的时候会抛出java.lang.NullPointerException异常,
因为其在计算Hash的时候调用了key.hashCode();当Key为Null的时候就会抛出异常,而且在put中,并未单独对null进行判断(key不能重复)
HashMap通过putForNullKey专门处理Key为null的情况(table[0])。

6.hash函数不同
hashtable:hashSeed ^ k.hashCode()
hashmap:
int h = hashSeed;
if (0 != h && k instanceof String) {
return sun.misc.Hashing.stringHash32((String) k);
}

  h ^= k.hashCode();
    h ^= (h >>> 20) ^ (h >>> 12);
    return h ^ (h >>> 7) ^ (h >>> 4);

7.HashTable特有方法:contains()
判断value是否存在containsValue()
相同点
1.底层数据结构都是数组+链表,加载因子都是0.75
2.扩容时机相同
处理速度
同时处理10万数据的添加、删除耗时比较
10W、100W、400W、。。。进行测试

结论:HashMap要比HashTable快(单线程下)
主要影响是:HashTable是线程安全的,使用了同步操作关键字Synchronize,
而Synchronize关键字是一个重量级锁,涉及用户空间可内核空间的切换,影响性能的点
long l = System.currentTimeMillis();//当前时间毫秒数

相关标签: 集合

上一篇: 集合

下一篇: linkedHashMap和HashMap