有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将list1添加到list2并在不影响list2的情况下更新list1

我正在做一个棋盘游戏,目前正在尝试将所有周围的邻居保存在一个2D数组中,作为列表中的列表。我遇到的问题是,当我将list1保存到list2,然后在迭代中继续并将list1更改为其他内容时,它也会影响list2,因此我会丢失另一个邻居的值

这就是我尝试过的:

     private ArrayList<ArrayList> forcedPlays = new ArrayList<ArrayList>();
     private ArrayList<Integer> forcedPlay = new ArrayList<Integer>();   

    private void findNeighbors(){
     for (int y = -1; y <=1 ; y+=2) {
           for (int x = -1; x <= 1; x+=2) {
               if (board[myY+y][myX+x]!=null){
                   enemyY = myY+y;
                   enemyX = myX+x;
                    forcedPlay.addAll(Arrays.asList(
                                     Integer.valueOf(enemyY),
                                     Integer.valueOf(enemyX)));

     forcedPlays.add(forcedPlay);
     forcedPlay.clear()}}}}

如果我的播放器被两个邻居包围,我希望forcedPlays的输出看起来像:[[2,1],[4,3],但是它看起来像[[],[]。所以我不明白的是,我如何将列表1添加到列表2中,然后切断它们之间的连接,这样当我清除列表1时,它就不会清除列表2了


共 (2) 个答案

  1. # 1 楼答案

    您可以在添加forcedPlay之前创建它的副本

    forcedPlays.add(new ArrayList<Integer>(forcedPlay));
    

    这样,对forcedPlay所做的更改不会影响添加到外部列表的列表

  2. # 2 楼答案

    你在做参考副本。基本上,list1指向list2的一些元素。您需要向列表2中添加列表1克隆中元素的副本