从arraylist中取消同步数组

时间:2016-11-09 02:42:21

标签: java arrays arraylist

基本示例

    int[] B;
    B=new int[4];
    B[0]=4;
    B[1]=3;
    B[2]=2;
    B[3]=1;
    ArrayList<int[]> C = new ArrayList<int[]>();
    C.add(B);
    B[0]=3;
    B[1]=2;
    B[2]=4;
    B[3]=1;
    C.add(B);

我有一个基本数组,我添加到列表中,我正在更改数组B值,因为我在循环中进行,我想将每个新B从循环添加到C但C自动与B同步阻止我添加新B.我需要添加新B的原因是为了跟踪循环的进度并防止重复。

目前,C与新B的大小始终为1。

2 个答案:

答案 0 :(得分:2)

保存数组的副本:

C.add(Arrays.copyOf(B, B.length)); //or System#arraycopy

Java是通过引用值传递的,因此数组通过引用传递,并且不会复制自身。

您应该尝试遵循通用样式指南(例如Oracle / Google变量命名约定)。

答案 1 :(得分:2)

为什么不创建一个新数组来保存您想要的值,并添加:

int[] B;
B = new int[4];
B[0] = 4;
B[1] = 3;
B[2] = 2;
B[3] = 1;
ArrayList<int[]> C = new ArrayList<int[]>();
C.add(B);
int[] temp = new int[4];
temp[0] = 3;
temp[1] = 2;
temp[2] = 4;
temp[3] = 1;
C.add(temp);

我打算建议使用System.arraycopy,但我认为您不需要这样做,因为您不需要实际复制B数组中的任何值。如果您计划在循环中执行此操作,则没有问题,因为临时数组将在超出范围时进行清理。