Java中HashMap中的重置
我对Java中HashMap中的重置,java,hashmap,Java,Hashmap,我对HashMap中的重新灰化的概念有点怀疑 假设我有一个大小为8的HashMap,在其中,索引7处有一个对象(E1)。因此,当我们放置多个元素时,强制HashMap增加其内部数组大小,这将导致重新灰化 所以我的问题是,在重新灰化之后,我的对象(E1)会被放置在第7个索引中,还是会得到一个不同的桶 感谢有用的响应和引用。您的密钥所在的存储桶是其hashCode模数的函数用于保存HashMap的数组大小(即存储桶的数量),因此重新散列可以将密钥移动到不同的存储桶。显示每个新存储桶将被重新索引到一个
HashMap
中的重新灰化的概念有点怀疑
假设我有一个大小为8的HashMap
,在其中,索引7处有一个对象(E1)。因此,当我们放置多个元素时,强制HashMap增加其内部数组大小,这将导致重新灰化
所以我的问题是,在重新灰化之后,我的对象(E1)会被放置在第7个索引中,还是会得到一个不同的桶
感谢有用的响应和引用。您的密钥所在的存储桶是其
hashCode
模数的函数用于保存HashMap的数组大小(即存储桶的数量),因此重新散列可以将密钥移动到不同的存储桶。显示每个新存储桶将被重新索引到一个存储桶(可能)新表中的不同索引:
void More ...transfer(Entry[] newTable) {
489 Entry[] src = table;
490 int newCapacity = newTable.length;
491 for (int j = 0; j < src.length; j++) {
492 Entry<K,V> e = src[j];
493 if (e != null) {
494 src[j] = null;
495 do {
496 Entry<K,V> next = e.next;
497 int i = indexFor(e.hash, newCapacity); // <-- new index is calculated here
498 e.next = newTable[i];
499 newTable[i] = e; // <-- and assigned
500 e = next;
501 } while (e != null);
502 }
503 }
504 }
void More…传输(条目[]新表){
489条目[]src=表格;
490 int newCapacity=newTable.length;
491表示(int j=0;j 497 int i=indexFor(e.hash,newCapacity);//它将被放置在不同的索引中。我发布答案是为了强调一点,即术语重新散列不能正确表示操作。它应该是重新索引
不幸的是,他也使用了同样的术语,称之为“重新洗牌”。但它描述了重建内部数据结构(数组)的过程。
。这个数组被他们称为哈希表,我认为这就是为什么新创建的哈希表被称为重新哈希表的原因。想知道:你为什么在意?换句话说:这些信息在哪方面相关?(并不是说这是一个糟糕的问题;我只是想知道它的实际相关性)它将放在另一个存储桶中(除非,碰巧,新的计算存储桶又是第七个存储桶)。为什么不阅读源代码呢?它与JDK一起提供。@Jägermeister:只是为了curosity:)@JBNizet:明白了:)…谢谢你的回答谢谢你的回答:)谢谢你的回答:)