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 上显示值

已知一个int型数组arraylist[],写出冒泡排序法

解释'空'C数组(int a = {};)

Java — “ArrayList<Integer>如何转化为int[ ]数组”

Java— “ArrayList<Integer>如何转化为int[ ]数组”

java int数组转ArrayList<Integer>