int []数组的Arraylist
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了int []数组的Arraylist相关的知识,希望对你有一定的参考价值。
我正在尝试一个简单的代码,我无法弄清楚出了什么问题。我试图将int []数组添加到ArrayList。它被正确添加。但是,一旦我在ArrayList中有超过1个元素,列表中的每个元素都将被最新值替换。我试图寻找可能的错误,但我找不到任何错误。我在这里给出了我的代码和输出,以便我可以帮助找出代码中的错误。
码:
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.Arrays;
public class main {
public static void main(String[] args) {
ArrayList<int[]> outer = new ArrayList<int[]>();
int[] list = new int[7];
int total = 2;
int l = 3;
SecureRandom rand = new SecureRandom();
for (int i = 0; i < total; i++)
{
if((i+1) % l == 0)
{
list = new int[7];
outer = new ArrayList<int[]>();
}
else {
for(int j = 0; j < 7; j++)
{
int num = rand.nextInt(100);
list[j] = num;
}
System.out.println(Arrays.toString(list));
outer.add(list);
System.out.println(outer.size());
System.out.println(i);
System.out.println(Arrays.toString(outer.get(i)));
}
}
System.out.println(Arrays.toString(outer.get(0)));
System.out.println(Arrays.toString(outer.get(1)));
}
}
我得到的输出是:
输出:
[13, 50, 3, 47, 53, 57, 61]
1
0
[13, 50, 3, 47, 53, 57, 61]
[66, 96, 45, 2, 95, 1, 69]
2
1
[66, 96, 45, 2, 95, 1, 69]
[66, 96, 45, 2, 95, 1, 69]
[66, 96, 45, 2, 95, 1, 69]
答案
您将重复添加相同的int[]
实例到列表中。
else { for(int j = 0; j < 7; j++) { int num = rand.nextInt(100); list[j] = num; } System.out.println(Arrays.toString(list)); outer.add(list); System.out.println(outer.size()); System.out.println(i); System.out.println(Arrays.toString(outer.get(i))); }
此列表中没有任何内容可以调用list = new int[7]
。这意味着每次通过新的随机数覆盖list
的内容,然后再次将相同的列表添加到ArrayList
。
ArrayList
很乐意让你一遍又一遍地添加相同的对象。重要的是要理解将对象放入ArrayList
并不会以某种方式复制它或任何东西。
另一答案
每次向ArrayList添加新的int []时,都需要每次都创建一个新数组。只需将int[] list = new int[7];
移动到for循环内部,这样它每次都会创建一个新的int []。
另一答案
您更改了相同的int[]
实例的值,无论i
是什么,并且您将int[]
的相同引用添加到outer
,因此outer.get(0)
和outer.get(0)
将始终相同。
以上是关于int []数组的Arraylist的主要内容,如果未能解决你的问题,请参考以下文章
在 Arraylist 的 listview 的 listitem 上显示值
Java — “ArrayList<Integer>如何转化为int[ ]数组”