摘要: 深入理解HashMap+ConcurrentHashMap的扩容策略 前言 理解HashMap和ConcurrentHashMap的重点在于: (1)理解HashMap的数据结构的设计和实现思路 (2)在(1)的基础上,理解ConcurrentHashMap的并发安全的设计和实现思路 前面的文章已经 阅读全文
posted @ 2019-12-25 16:11 朱子威 阅读(945) 评论(0) 推荐(0)
摘要: Java7 中实现的 ConcurrentHashMap 说实话还是比较复杂的,Java8 对 ConcurrentHashMap 进行了比较大的改动。建议读者可以参考 Java8 中 HashMap 相对于 Java7 HashMap 的改动,对于 ConcurrentHashMap,Java8 阅读全文
posted @ 2019-12-25 14:48 朱子威 阅读(469) 评论(0) 推荐(0)
摘要: Java8 HashMap Java8 对 HashMap 进行了一些修改,最大的不同就是利用了红黑树,所以其由 数组+链表+红黑树 组成。 根据 Java7 HashMap 的介绍,我们知道,查找的时候,根据 hash 值我们能够快速定位到数组的具体下标,但是之后的话,需要顺着链表一个个比较下去才 阅读全文
posted @ 2019-12-25 14:09 朱子威 阅读(226) 评论(0) 推荐(0)
摘要: 1、默认容量? HashTable默认容量为11,计算hash的方式为如下: int hash = key.hashCode();int index = (hash & 0x7FFFFFFF) % tab.length; 根据证明,对素数或奇数直接取模,分布的会更均匀。其它Map的默认容量都为16, 阅读全文
posted @ 2019-12-25 11:23 朱子威 阅读(437) 评论(0) 推荐(0)
摘要: 哈希 Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长 阅读全文
posted @ 2019-12-25 10:47 朱子威 阅读(849) 评论(0) 推荐(0)
摘要: 什么是容量 在Java中,保存数据有两种比较简单的数据结构:数组和链表。数组的特点是:寻址容易,插入和删除困难;而链表的特点是:寻址困难,插入和删除容易。HashMap就是将数组和链表组合在一起,发挥了两者的优势,我们可以将其理解为链表的数组。在HashMap中,有两个比较容易混淆的关键字段:siz 阅读全文
posted @ 2019-12-25 10:29 朱子威 阅读(4274) 评论(3) 推荐(0)