【问题标题】:ArrayList copy all the above items when I add a new element? Java添加新元素时,ArrayList 会复制上述所有项目吗?爪哇
【发布时间】:2015-08-29 17:06:45
【问题描述】:

我有以下几点:

ArrayList<int[]> lista = new ArrayList<int[]>();

int[] posible_mov = new int[2];

posible_mov[0] = 0;
posible_mov[1] = 0;
lista.add(posible_mov);

posible_mov[0] = 1;
posible_mov[1] = 1;
lista.add(posible_mov);

好吧,如果我用 arraylist 走秀并获取所有元素方法,在这两种情况下都会向我展示:

lista.get(0) => 1, 1 lista.get(1) => 1, 1

为什么?

【问题讨论】:

  • 我认为你需要澄清这个问题。我已经读了 3 遍了,但我仍然不能完全确定你在问什么。
  • 对不起,我是西班牙人。我不能用英语很好地解释

标签: java arrays arraylist copy elements


【解决方案1】:

您将对posible_mov 的引用添加到lista 中。这就是为什么你总是打印 1,1 的原因,因为在代码的最后一部分你分配了 posible_mov值 1。你可以尝试更改分配的顺序,你会看到你会打印 0,0。

如果你想添加几个对象,而不是引用它们,那么你可以这样做:

int[] posible_mov = new int[2];

posible_mov[0] = 0;
posible_mov[1] = 0;
lista.add(posible_mov);

posible_mov = new int[2]
posible_mov[0] = 1;
posible_mov[1] = 1;
lista.add(posible_mov);

更多阅读请查看Java Pass by reference or value

【讨论】:

    【解决方案2】:

    您的参考变量只是覆盖了之前存储的值。

    因此,为了不让这种情况发生,您可以创建另一个对象而不引用它们,或者如果您想同时保留两个数组,则可以创建一个具有不同名称的另一个数组。 在第一个 lista.add() 函数之后,您可以添加以下内容之一:

    posible_mov = new int[2];
    

    int[] posible_mov_1 = new int[2]; //Use this variable name for further operations on this object
    

    【讨论】:

      猜你喜欢
      • 2011-08-02
      • 1970-01-01
      • 2021-02-27
      • 1970-01-01
      • 1970-01-01
      • 2020-07-21
      • 2021-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多