
jdk源码
IT_datouer
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Hashtable中的rehash()方法
protected void rehash() { int oldCapacity = table.length; Entry<?,?>[] oldMap = table; // overflow-conscious code int newCapacity = (oldCapacity << 1) + 1;//扩容策略:原容量扩大两倍+1 if (newCapacity - MAX_ARRAY_SIZ原创 2021-07-16 13:06:59 · 332 阅读 · 0 评论 -
Hashtable中的get(key)方法,为什么进行hash & 0x7FFFFFFF
public synchronized V get(Object key) { Entry<?,?> tab[] = table; int hash = key.hashCode(); int index = (hash & 0x7FFFFFFF) % tab.length; // 为啥要把hash值和0x7FFFFFFF做一次按位与操作呢, // 主要是为了保证得到的index的第一位为0,也就是为了得到一个正数。原创 2021-07-16 12:25:04 · 691 阅读 · 0 评论 -
HashMap中的迭代器
abstract class HashIterator { Node<K,V> next; // next entry to return Node<K,V> current; // current entry int expectedModCount; // for fast-fail 记录修改次数,多线程引起两次修改次数不同将抛出异常 int index; // cur原创 2021-07-16 11:15:27 · 616 阅读 · 0 评论 -
JDK1.8源码 resize()解析
final HashMap.Node<K,V>[] resize() { HashMap.Node<K,V>[] oldTab = table; int oldCap = (oldTab == null) ? 0 : oldTab.length; int oldThr = threshold; //threshold在table未初始化时存储的是构造方法中tableSizeFor(initialCapacity)的值,如果未带参数ini原创 2021-07-14 13:21:32 · 231 阅读 · 0 评论 -
Jdk1.8-HashMap put() 方法tab[i = (n - 1) & hash] 解惑
读过HashMap源码的同学对下面这段应该都不陌生,之前博主也读过,但是只是浅尝即止,这次有时间看了一下,发现put方法有一段不是很清楚,就是 if ((p = tab[i = (n - 1) & hash]) == null) tab[i] = newNode(hash, key, value, null);这段代码,其中获取了当前table数组的最大下标与hash(key)进行按位与操作,上网也查了一下,没有找到相关的,稍后自己回忆了一下按位与操作,其实很容易懂: 就是最简单的如果没有Hash冲原创 2021-07-13 17:17:35 · 372 阅读 · 0 评论 -
HashMap中的tableSizeFor(int cap)
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 : (n原创 2021-07-13 16:57:12 · 361 阅读 · 0 评论