动态生成和存储ArrayList中的基元

时间:2014-08-28 09:35:16

标签: java arraylist

我编写了一个函数来插入两个数组之间的步骤,但是在插值完成之前,所需的步数是未知的。

这是我的功能:

int[][] interpolate(int[] source, int[] goal){

    int[] current = new int[source.length];
    ArrayList<int[]> steps = new ArrayList<int[]>();

    while(/* condition */){
        // Change value of current

        steps.add(current);
    }
    int[][] stepsArr = steps.toArray(new int[0][0]);
    return stepsArr;
}

我尝试使用ArrayList来存储状态,但是我确定ArrayList只存储指针,因此最终的ArrayList包含多个指向同一对象的指针(当前的最终值)。

有没有办法动态生成int []实例以分步存储,否则生成一个2D整数数组?

2 个答案:

答案 0 :(得分:1)

您的问题与您对原始类型的使用无关,而是与数组的处理有关。通过添加current数组的副本修复代码,它将正常运行:

steps.add(Arrays.copyOf(current));

答案 1 :(得分:0)

您始终存储current的相同实例。您可以为每次迭代创建一个新实例。

int[][] interpolate(int[] source, int[] goal){

    int[] current;
    ArrayList<int[]> steps = new ArrayList<int[]>();

    while(/* condition */){
        current = new int[source.length];
        // Change value of current

        steps.add(current);
    }
    int[][] stepsArr = steps.toArray(new int[0][0]);
    return stepsArr;
}