摘要: ConcurrentHashmap、HashMap和Hashtable都是key-value存储结构,但他们有一个不同点是 ConcurrentHashmap、Hashtable不支持key或者value为null,而HashMap是支持的。 为什么要这么设计? 在网上找到了这样的解答:The ma 阅读全文
posted @ 2021-02-22 17:42 周文豪 阅读(494) 评论(0) 推荐(0)
摘要: 需要,因为要重新计算旧数组元素在新数组地址。HashMap在JDK1.8中的rehash算法(也就是扩容后重新为里面的键值对寻址的算法)进行优化。hash寻址算法是 index =(n - 1) & hash 在JDK1.7的时候,是将数组扩容为两倍,然后将HashMap中所有的key重新进行has 阅读全文
posted @ 2021-02-22 16:51 周文豪 阅读(4758) 评论(0) 推荐(1)
摘要: 在当我们对HashMap初始化时没有设置初始化容量,系统会默认创建一个容量为16的大小的集合。当HashMap的容量值超过了临界值(默认16*0.75=12)时,HashMap将会重新扩容到下一个2的指数幂(16->32)。HashMap扩容将要进行resize的操作,频繁resize,会导致降低性 阅读全文
posted @ 2021-02-22 16:11 周文豪 阅读(1258) 评论(0) 推荐(0)
摘要: HashMap通过resize()方法进行扩容。 源码解析: resize()函数有两种使用情况: 一、当table数组为null时初始化hash表。 二、当table数组不为null时进行扩容。 1、如果table数组的容量超过最大容量时,无法扩容,直接返回旧的数组。并将threshold值设置为 阅读全文
posted @ 2021-02-22 15:57 周文豪 阅读(5951) 评论(0) 推荐(2)
摘要: Threshold:table数组元素个数size的大小超过threshold且且Node<K,V>[] table数组长度没有超过64时时table数组扩容。当hashmap中的元素个数size超过数组长度*loadFactor时,就会进行数组扩容,loadFactor的默认值为0.75,也就是说 阅读全文
posted @ 2021-02-22 12:13 周文豪 阅读(3230) 评论(0) 推荐(0)
摘要: 底层原理:Map + 无序 + 键唯一 + 哈希表 (数组+Entry)+ 存取值 1、HashMap是Map接口的实现类。实现HashMap对数据的操作,允许有一个null键,多个null值。 ConcurrentHashmap、Hashtable不支持key或者value为null,而HashM 阅读全文
posted @ 2021-02-22 11:54 周文豪 阅读(1806) 评论(0) 推荐(0)
摘要: 源码: Hash(key):计算出key的hash值。 put方法详解: 1、如果table数组为null或者table数组的长度为0,则调用resize()方法扩容并返回table数组。数组的长度为n,(put时确保table数组不为空且长度不为0) 2、如果table数组不为null且数组的长度 阅读全文
posted @ 2021-02-22 11:47 周文豪 阅读(1048) 评论(0) 推荐(0)