这段代码为什么抛出异常?为什么这个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