首先,其他几个答案是误导性的和/或不正确的。请注意,数组是一个对象。因此,您可以将它们用作列表中的元素,无论数组本身是否包含基本类型或对象引用。
接下来,将变量声明为List<int[]> list
优于将其声明为ArrayList<int[]>
。这使您可以轻松更改List
to a LinkedList
或其他一些实现,而不会破坏代码的其余部分,因为它保证只使用List
界面。要了解更多信息,您应该研究“接口编程”。
现在回答您真正的问题,该问题仅作为评论添加。让我们看一下您的几行代码:
Integer[] point = new Integer[3];
这一行创建了一个数组Integer
显然。
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 3; j++) {
point[j] = (int)(Math.random() * 10);
}
//Doesn't this line add filled Integer[] point to the
//end of ArrayList list?
list.add(point);
//...
}
在这里,您为数组的元素赋值,然后添加参考到数组到你的List
。每次循环迭代时,您都会分配新值到同一个数组并添加对同一数组的另一个引用 to the List
。这意味着List
有 10 条参考文献到同一个数组已经被反复写过。
迭代器 it = list.iterator();
while (it.hasNext()) {
点 = (Integer[])it.next();
for (int i = 0; i
现在这个循环打印出相同的数组10倍。数组中的值是上一个循环结束时设置的最后一个值。
要解决该问题,您只需确保创建 10 个不同的 arrays.
最后一个问题:如果你声明it
as Iterator<Integer[]> it
(or Iterator<int[]> it
),您不需要转换返回值it.next()
。事实上,这是首选,因为它是类型安全的。
最后我想问一下什么是int
每个数组中的s代表?您可能需要重新审视您的程序设计并创建一个包含这三个内容的类int
s,可以是一个数组,也可以是三个成员变量。