数组列表初始容量和索引出界异常
请考虑以下代码示例:
List<String> myList = new ArrayList<String>(7);
myList.add(5, "Hello");
myList.removeAll(Collections.singleton(null));
System.out.println(myList.size() + " objects:" );
for (String s : myList) {
System.out.println("\t" + s);
}
myList
初始化为初始容量 7,然后下一行尝试在位置 5 处添加字符串“Hello”。这会引发一个 IndexOutOfBoundsException:
线程 “main” java.lang.IndexOutOfBounds中的异常异常: 索引: 5, 大小: 0
我看了一下这个问题,关于“初始容量”在ArrayList中的含义。我知道这个特定的构造函数正在为7个String元素分配空间,如果我们尝试向列表中添加8个元素,则必须分配更多空间。
我不明白的是,为什么它不会创建一个大小为7的“空”列表,每个索引处都有空值,类似于我们声明时发生的情况。我记得了解到ArrayList是Java对动态数组的实现,所以我期望类似的行为。如果我在声明时实际上没有为7个字符串分配空间,那么实际发生了什么?String[] myArray = new String[7]
new ArrayList<String>(7)