• 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()。

  • 相关阅读:
    js-20170816-Date对象
    js-20170804-Math对象
    js-20170619-string对象
    微信web开发者工具
    前端开发指南
    接口调试工具DHC
    CSS预处理器
    Weex
    Vue.js
    hbuilder
  • 原文地址:https://www.cnblogs.com/xiaolovewei/p/9079487.html
Copyright © 2020-2023  润新知