美文网首页JavaEE Note程序员
Hashtable和HashSet的区别

Hashtable和HashSet的区别

作者: chcvn | 来源:发表于2017-11-24 23:16 被阅读27次

    作者博客@Stone原地址

    HashMap和Hashtable都实现了Map接口 但决定用哪一个之前先要弄清楚它们之间的分别

    • 主要的是线程安全性,同步(synchronization),以及速度

    区别

    • HashMap是非synchronized的,并可以接受null (HashMap可以接受为null的键值(key)值(value),而Hashtable则不行)。

    • HashMap是非synchronized,而Hashtable是synchronized,这意味着Hashtable是线程安全的,多个线程可以共享一个Hashtable;

    • 而HashMap如果没有正确的同步的话,多个线程是不能共享HashMap的

    • 由于Hashtable是线程安全的也是synchronized,所以在单线程环境下它比HashMap要慢。如果你不需要同步,只需要单一线程,那么使用HashMap性能要好过Hashtable。

    重要的说一下他们存储空值出现的问题

    • Hashtable中,key和value都不允许出现null值。但是如果在Hashtable中有添加空值得操作,编译是会通过,但是在运行的时候就会,抛出NullPointerException异常,这是JDK的规范规定的。

    • HashMap中,null可以作为键,但是null的key键只能有一个

      • 而这个时候要注意,不能用get()方法,来判断 HashMap中是否存在某个键, 而应该用containsKey()方法来判断
    • 他们哈希值的使用不同,HashTable直接使用对象的hashCode。而HashMap重新计算hash值。

      • hashCode是jdk根据对象的地址或者字符串或者数字算出来的int类型的数值
      • 而HashMap重新计算了key的hash值 (!这里我也不知道对不对)

    内部实现使用的数组初始化不同

    • HashTable在不指定容量的情况下的默认容量为11,而HashMap为16

    如何让HashMap 安全列?

    • 最好,也是最常用的是,让HashMap的线程安全,那就给它加死锁(同步)

    思维导图如下:

    (作者博客@Stone原地址)

    enter description hereenter description here

    相关文章

      网友评论

        本文标题:Hashtable和HashSet的区别

        本文链接:https://www.haomeiwen.com/subject/cwrqbxtx.html