ArrayList<ArrayList<Integer>> a = new ArrayList<ArrayList<Integer>>(5);
for (int i = 0 ; i < a.size() ; i++){
a.set(i, new ArrayList<Integer>(10));
}
System.out.println(a.get(a.size()-1).get(9)); //exception thrown
以上代码段在打印部分引发异常。为什么呢?
答案 0 :(得分:19)
您只设置外部/内部ArrayLists的容量。它们仍然是空的。
而且你的循环甚至都没有执行,因为a.size()
是0
您需要第二个内部循环来向它们添加元素。
ArrayList<ArrayList<Integer>> a = new ArrayList<ArrayList<Integer>>(5);
for (int i = 0; i < 5 ; i++) {
List<Integer> lst = new ArrayList<Integer>(10);
for (int j = 0; j < 10; j++) {
lst.add(j);
}
a.add(lst);
}
System.out.println(a.get(a.size()-1).get(9));
修改并提防a.set(i, ...)
。如果i&gt; = a.size()。
答案 1 :(得分:2)
我相信如果你把
System.out.println(a.size());
在第一行之后,您将看到外部数组的大小为零。因此循环执行零次,因此在循环之后,您正在请求a的第-1个元素 - 这是一个错误。
答案 2 :(得分:1)
创建new ArrayList<Integer>(10)
时,“10”只表示初始容量。它仍然是一个空列表,您无法在其上调用get(9)
。
答案 3 :(得分:1)
a是一个空列表,所以a.size()= 0所以在a.get(a.size() - 1)中表达式(a.size() - 1)是-1所以a.get( - 1)抛出ArrayIndexOutOfBoundsException
答案 4 :(得分:0)
您已在for循环中创建了空数组列表,因此尝试访问其中的任何元素都会返回null到System.out.println()
修改的 抱歉,不会返回null,而是抛出ArrayIndexOutOfBoundsException。
答案 5 :(得分:0)
请注意new ArrayList(10)
创建一个空 ArrayList,其内部支持数组最初设置为10。在您向其添加元素之前,ArrayList为空。构造函数允许您将初始内部大小指定为优化度量。