在Java中,一個java.util.HashMap<Key, Value>
可以無提示地溢出,所以內容被刪除而我沒有收到異常或其他通知?如果是的話,我該如何使它顯而易見?Java的HashMap能否默默地溢出?
我的意思是它可以超過物理硬件內存,而不是保留內存的HashMap
對象。
在Java中,一個java.util.HashMap<Key, Value>
可以無提示地溢出,所以內容被刪除而我沒有收到異常或其他通知?如果是的話,我該如何使它顯而易見?Java的HashMap能否默默地溢出?
我的意思是它可以超過物理硬件內存,而不是保留內存的HashMap
對象。
不,HashMap
s不會自動驅逐元素。如果桶滿了,桶會被擴展,所有元素會自動重新加入。
從docs
當在散列表中的條目的數量超過了 負載率和電流容量的產品,哈希表被重新散列 (即,內部數據結構被重建),這樣的哈希表 有水桶
一個HashMap
的大約兩倍的數量絕不會「溢出」,它只會調整。這會一直髮生,直到你用完內存,這將導致very loud error。
其他答案是正確的,但有一個奇怪的邊緣情況。請參閱Theoretical limit for number of keys (objects) that can be stored in a HashMap?以及有關Map
中的條目數多於Integer.MAX_VALUE
時會發生什麼情況的討論。
因此,它在理論上是可能的 - 如果你以某種方式設法打破這種限制(這幾乎是不可能的)和的JVM倖存處理許多對象(這幾乎是不可能的)和程序存活該限制(這幾乎是不可能的),那麼不僅物體開始似乎從你的Map
中消失,而且你將在Milliways處獲得早餐的一半,其中如果你今天早上做了六件不可能的事情,爲什麼不呢在Milliways餐廳,宇宙盡頭的餐廳提供早餐。
這沒有任何意義。 'HashMap的大小動態增長,沒有限制。每個值都有一個特定的鍵值,除非你自己刪除它,否則它會留在那裏(除非你使用'WeakHashMap',如果該項目的唯一引用是地圖,那麼將從地圖中刪除東西) – 2014-10-30 16:28:58