在第一种情况下(
ArrayList::new),您正在使用带有初始容量参数的构造函数,在第二种情况下,则不是。较大的初始容量(
index在您的代码中)导致
Object[]要分配的较大容量,从而导致
OutOfMemoryErrors。
这是两个构造函数的当前实现:
public ArrayList(int initialCapacity) { if (initialCapacity > 0) { this.elementData = new Object[initialCapacity]; } else if (initialCapacity == 0) { this.elementData = EMPTY_ELEMENTDATA; } else { throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity); }}public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;}在中发生了类似的事情
HashSet,除了在
add调用之前不分配数组。



