HashMap
文章平均质量分 75
马儿快跑儿
解决问题最好的方式就是提升自己
展开
-
HashMap中tableSizeFor
static final int tableSizeFor(int cap) { int n = cap - 1; n |= n >>> 1; n |= n >>> 2; n |= n >>> 4; n |= n >>> 8; n |= n >>> 16; return (n < 0) ? 1...转载 2021-08-03 15:21:59 · 219 阅读 · 0 评论 -
HashMap扩容时数据迁移实现的亮点(ConcurrentHashMap类似)
首先让我们看一下扩容代码: final Node<K,V>[] resize() { Node<K,V>[] oldTab = table; int oldCap = (oldTab == null) ? 0 : oldTab.length; int oldThr = threshold; int newCap, newThr = 0; if (oldCap > 0) {原创 2020-11-13 15:54:52 · 2426 阅读 · 1 评论 -
HashMap中的hash函数
1. 什么是 hash 函数hash 函数,即散列函数,或叫哈希函数。它可以将不定长的输入,通过散列算法转换成一个定长的输出,这个输出就是散列值。需要注意的是,不同的输入通过散列函数,也可能会得到同一个散列值。因此我们不能使用散列函数来获取唯一值。2. HashMap 为什么要使用 hash 函数Java 的 HashMap 中使用的是数组 + 链表的结构,但在保存时,一个 K - V 键值对应该被存放到数组的哪个位置?通常我们都会想到:按照存入顺序存放。但是,按照这种策略,在取值时势必需要遍历转载 2020-06-18 19:44:08 · 1560 阅读 · 1 评论 -
HashMap常见面试题
谈一下HashMap的特性?HashMap以键值对的方式存储,允许null键和null值。 非线程安全 底层由hash表实现,无序原创 2020-06-18 17:43:36 · 359 阅读 · 0 评论