這段代碼爲什麼拋出異常?爲什麼這個hashmap初始容量試圖調整大小?
public static void main(String[] args) {
Map<Integer, Integer> map = new HashMap<>(Integer.MAX_VALUE);
System.out.println("map size: "+map.size());
map.put(1, 1);
System.out.println("map size: "+map.size());
}
輸出:
map size: 0
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.HashMap.resize(HashMap.java:703)
at java.util.HashMap.putVal(HashMap.java:628)
at java.util.HashMap.put(HashMap.java:611)
at com.fredcrs.codejam.NumberToBinary.main(NumberToBinary.java:24)
不應該HashMap中只調整到一個更大的,當它是滿了嗎?
編輯: 它還與初始化時,它引發同一異常:
Map<Integer, Integer> map = new HashMap<>(Integer.MAX_VALUE-3);
但是你告訴它有一個'MAX_VALUE的initialCapacity'看到[javadoc文檔(https://docs.oracle.com/javase/7:當我和
-Xmx9G
運行它成功地與輸出完畢/文檔/ API/JAVA/UTIL/HashMap中。html#HashMap(int)) –是的,但初始容量意味着用於索引鍵的數組大小(散列) – fredcrs