[英]Why does this nested ArrayList code throw an exception?
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
上面的代码段在打印部分引发异常。 为什么?
您只设置外部/内部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> = a.size(),则抛出异常。
我相信如果你放
System.out.println(a.size());
在第一行之后,您将看到外部数组的大小为零。 因此循环执行零次,因此在循环之后,您正在请求a的第-1个元素 - 这是一个错误。
创建new ArrayList<Integer>(10)
,“10”只表示初始容量。 它仍然是一个空列表,你不能在它上面调用get(9)
。
a是一个空列表,所以a.size()= 0所以在a.get(a.size() - 1)中表达式(a.size() - 1)是-1所以a.get(-1)抛出ArrayIndexOutOfBoundsException异常
您已在for循环中创建了空数组列表,因此尝试访问其中的任何元素都会返回null到System.out.println()
编辑抱歉,不会返回null,而是抛出ArrayIndexOutOfBoundsException。
请注意, new ArrayList(10)
创建一个空的 ArrayList,其内部支持数组最初设置为10。在向元素添加元素之前,ArrayList为空。 构造函数允许您将初始内部大小指定为优化度量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.