HashMap和Hashtable区别

泄露秘密 提交于 2020-01-25 06:30:25

区别
1、线程区别
首先看HashMap的源码在添加时的处理

 public V put(K key, V value) {
        return putVal(hash(key), key, value, false, true);
    }

其次看Hashtable的源码在添加时的处理

 public synchronized V put(K key, V value) {
        // Make sure the value is not null
        if (value == null) {
            throw new NullPointerException();
        }

后者在操作时添加了synchronized保证了线程安全,Hashtable数据操作的时候都会上锁,所以效率比较低下。

2、为什么HashMap可以添加空key,而Hashtable不行呢?
HashMap在添加空key的时候做了特殊处理,如果key的null的话就等于0

  static final int hash(Object key) {
        int h;
        return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
    }

Hashtable在添加时做了判断如果key为空时会抛出空异常

 if (value == null) {
        throw new NullPointerException();
    }

3、初始容量

HashMap的初始扩容为16
Hashtable的初始扩容为11

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!