【发布时间】:2018-01-14 06:23:58
【问题描述】:
为什么这段代码会抛出异常?
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请参阅javadocs -
是的,但初始容量是指用于索引键的数组的大小(散列)
标签: java dictionary hashmap initialization hashtable