在java中,HashMap 或者HashTable,它们的键值被放满了,会出现啥情况( 二 )

或者不断的rehash导致capacity变大,我们查看resize方法可以知道一旦超过了MAXIMUM_CAPACITY,jdk仅仅是将 threshold 改为 Integer.MAX_VALUE void resize(int newCapacity) { Entry oldTable = table; int oldCapacity = oldTable.length; if (oldCapacity == MAXIMUM_CAPACITY) { threshold = Integer.MAX_VALUE; return; } 【在java中,HashMap 或者HashTable,它们的键值被放满了,会出现啥情况】 那如果最后超过了Integer.MAX_VALUE怎么办?我估计是jvm会自动根据之前分配的内存继续增大threshlod,当然抛出一个异常也未尝不可。
顺便吐槽一下题主,注意大小写!没有HashTable只有Hashtable!!
■网友
放满了自动会增加空间咯~HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。
■网友
hashmap扩充是咋样扩充 2倍吗?
■网友
会触发rehash,底层实现根据jdk版本不同而不同。jdk1.7,会讲冲突的key放入链表里。jdk1.8,如果链表长度大于8,则转成红黑树存储。
■网友
没填满之前就会扩容,然后重新哈希,请估算对象数量先。


推荐阅读