在Java中,java.util.HashMap<Key, Value>
是否可以静默溢出,因此在没有收到异常或其他通知的情况下删除内容?如果是的话,我该如何让它变得明显?
我的意思是它可以超过物理硬件内存,而不是HashMap
对象的保留内存。
答案 0 :(得分:3)
来自docs
当哈希表中的条目数超过产品时 加载因子和当前容量,哈希表重新哈希 (即重建内部数据结构)以便哈希表 大约有两倍的桶数
HashMap
永远不会“溢出”,它只会调整大小。这将一再发生,直到你的内存不足,这将导致very loud error。
答案 1 :(得分:2)
不,HashMap
s不会自动驱逐元素。如果存储桶太满,则会扩展存储桶并自动重新处理所有元素。
答案 2 :(得分:2)
其他答案是正确的,但有一个奇怪的边缘情况。请参阅Theoretical limit for number of keys (objects) that can be stored in a HashMap?以及有关Map
中的条目多于Integer.MAX_VALUE
时会发生什么情况的讨论。
因此理论上它是可行的 - 如果你以某种方式设法打破了这个限制(几乎不可能)和 JVM幸存下来处理那么多对象(这几乎是不可能的)和你的程序幸存下来(这几乎是不可能的)然后不仅对象开始似乎从你的Map
消失了,但你将在{{3}获得早餐的一半} 如果你今天早上做了六件不可能完成的事情,为什么不在Milliways,宇宙尽头的餐厅吃早餐呢?