zoukankan      html  css  js  c++  java
  • HashMap和Hashtable的比较

    相同点

    HashMapHashtable都是存储“键值对(key-value)”的散列表,而且都是采用拉链法解决hash冲突的。但是1.8中,hashmap引入了红黑树。Hashtable没有引入红黑树

    不同点

    1.线程安全性。

       hashmap线程不安全,hashtable是线程安全的,底层对方法进行同步了。

    Hashtable中使用Synchronized来修饰方法(锁是对象锁this),这样相当于对整张表进行锁定了,因为多个线程如果通过同一个HashTable对象访问方法,这些方法的锁就是同一个对象,就会造成阻塞。

    2.对null的处理不同

    HashMap的key、value都可以为null
    Hashtable的key、value都不可以为null

    3.容量的初始值 和 增加方式都不一样

    HashMap默认的容量大小是16;扩容时,每次将容量变为“原始容量x2”。容量是2的幂次
    Hashtable默认的容量大小是11;扩容时,每次将容量变为“原始容量x2 + 1”。

    加载因子都是0.75f

    4.数组初始化时机

    hashtable数组的初始化在构造函数中就完成了,构造函数中给数组分配内存空间

    hashmap中数组的初始化并不是在构造函数中进行,而是在第一次存入元素的时候进行,也就是在put是进行初始化(会调用resize()方法)

    5.添加key-value时的hash值算法不同

    HashMap添加元素时,是使用自定义的哈希算法。
    Hashtable没有自定义哈希算法,而直接采用的key的hashCode()。

  • 相关阅读:
    关于iterator的一点疑惑
    shuffle()方法
    List简单使用笔记
    Arrays.asList()
    多项式ADT(数组存储多项式系数和指数)笔记
    《数据结构与算法分析C语言描述》源码网盘分享
    C语言实现链表
    typedef的用法
    #ifndef的用法
    mysql创建数据库和数据表模板
  • 原文地址:https://www.cnblogs.com/xiaolovewei/p/9079487.html
Copyright © 2011-2022 走看看