JDK1.8HashMap的resize()源码中,如何实现扩容操作和元素重新哈希的细节?

2026-04-03 01:401阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计507个文字,预计阅读时间需要3分钟。

JDK1.8HashMap的resize()源码中,如何实现扩容操作和元素重新哈希的细节?

javafinal Node[] resize() { Node[] oldTab=table; int oldCap=oldTab==null ? 0 : oldTab.length; int newCap, newThr=0; if (oldCap==0) { threshold=(int)(loadFactor * initialCapacity); newCap=initialCapacity; } else if (oldCap==MAX_CAPACITY) { threshold=Integer.MAX_VALUE; return oldTab; } else { int oldThr=threshold; if (oldThr > 0) { newCap=oldCap <<1; if (newCap =DEFAULT_CAPACITY) { newThr=oldThr <=DEFAULT_CAPACITY) { newCap=DEFAULT_CAPACITY; } else { newCap=oldCap + 1; } if (newThr==0) { float ft=(float)loadFactor * oldCap; newThr=(newCap

JDK1.8HashMap的resize()源码中,如何实现扩容操作和元素重新哈希的细节?

finalNode[]resize(){Node[]oldTabtable;intoldCap(oldTabnull)?0:oldTab.length;into

final Node[] resize() { Node[] oldTab = table; int oldCap = (oldTab == null) ? 0 : oldTab.length; int oldThr = threshold; int newCap, newThr = 0; //如果有容量,说明该map已经有元素 if (oldCap > 0) { if (oldCap >= MAXIMUM_CAPACITY) { threshold = Integer.MAX_VALUE; return oldTab; } //在此处newCap = oldCap <<1,容量翻倍了 else if ((newCap = oldCap <<1) 0) // initial capacity was placed in threshold newCap = oldThr; else { // zero initial threshold signifies using defaults newCap = DEFAULT_INITIAL_CAPACITY; newThr = (int)(DEFAULT_LOAD_FACTOR * DEFAULT_INITIAL_CAPACITY); } if (newThr == 0) { float ft = (float)newCap * loadFactor; newThr = (newCap = DEFAULT_INITIAL_CAPACITY了,那么threshold也扩大两倍 */ if (oldTab != null) { //将原来map中非null的元素rehash之后再放到newTab里面去 for (int j = 0; j

本文共计507个文字,预计阅读时间需要3分钟。

JDK1.8HashMap的resize()源码中,如何实现扩容操作和元素重新哈希的细节?

javafinal Node[] resize() { Node[] oldTab=table; int oldCap=oldTab==null ? 0 : oldTab.length; int newCap, newThr=0; if (oldCap==0) { threshold=(int)(loadFactor * initialCapacity); newCap=initialCapacity; } else if (oldCap==MAX_CAPACITY) { threshold=Integer.MAX_VALUE; return oldTab; } else { int oldThr=threshold; if (oldThr > 0) { newCap=oldCap <<1; if (newCap =DEFAULT_CAPACITY) { newThr=oldThr <=DEFAULT_CAPACITY) { newCap=DEFAULT_CAPACITY; } else { newCap=oldCap + 1; } if (newThr==0) { float ft=(float)loadFactor * oldCap; newThr=(newCap

JDK1.8HashMap的resize()源码中,如何实现扩容操作和元素重新哈希的细节?

finalNode[]resize(){Node[]oldTabtable;intoldCap(oldTabnull)?0:oldTab.length;into

final Node[] resize() { Node[] oldTab = table; int oldCap = (oldTab == null) ? 0 : oldTab.length; int oldThr = threshold; int newCap, newThr = 0; //如果有容量,说明该map已经有元素 if (oldCap > 0) { if (oldCap >= MAXIMUM_CAPACITY) { threshold = Integer.MAX_VALUE; return oldTab; } //在此处newCap = oldCap <<1,容量翻倍了 else if ((newCap = oldCap <<1) 0) // initial capacity was placed in threshold newCap = oldThr; else { // zero initial threshold signifies using defaults newCap = DEFAULT_INITIAL_CAPACITY; newThr = (int)(DEFAULT_LOAD_FACTOR * DEFAULT_INITIAL_CAPACITY); } if (newThr == 0) { float ft = (float)newCap * loadFactor; newThr = (newCap = DEFAULT_INITIAL_CAPACITY了,那么threshold也扩大两倍 */ if (oldTab != null) { //将原来map中非null的元素rehash之后再放到newTab里面去 for (int j = 0; j