0
点赞
收藏
分享

微信扫一扫

【HashMap 与Hashtable的区别】

禾木瞎写 2022-03-11 阅读 80
后端java

HashMap 与Hashtable的区别?

  1. 线程安全
    Hashtable是线程安全的,HashMap 不是线程安全的。
    Hashtable 所有的元素操作都是synchronized修饰的
    而HashMap并没有

  2. 性能优劣
    既然Hashtable是线程安全的,每个方法都要阻塞其他线程,所以Hashtable性能较差HashMap性能较好,使用更广。
    如果要线程安全又要保证性能,建议使用JUC包下的ConcurrentHashMap.

  3. NUll
    Hashtable是不允许键值为null
    HashMap的键值都可以为null

  4. 实现方式
    Hashtable继承了Dictionary类
    HashMap继承的是AbstractMap类

  5. 容量扩容
    HashMap的初始容量为 16
    hashtable的初始容量为 11

    两者的负载因子默认都是 0.75
    当现有容量大于总容量 * 负载因子时,HashMap扩容规则为当前容量的翻倍,Hashtable扩容为当前容量翻倍+1

  6. 迭代器
    HashMap 中的 lterator迭代器是fail-fast 的
    Hashtable 的 Enumerator 不是 fail-fast的

    所以,当其他线程改变了HashMap 的结构,如:增加、删除元素,将会抛出ConcurrentModificationException异常,而Hashtable 则不会。

举报

相关推荐

0 条评论