Java 在二维数组列表中覆盖

Java 在二维数组列表中覆盖,java,arrays,list,pass-by-reference,Java,Arrays,List,Pass By Reference,我有一个问题,我输入的数据写入列表中的所有元素,而不是一个元素,我真的很难弄清楚原因,感谢所有能够帮助我的人 public class Courts implements Serializable { private static final long serialVersionUID = 1; List<String[][]> allCourts = new ArrayList<String[][]>(10); } 格式有点不稳定,很抱歉 我认为这应该做的是从co

我有一个问题,我输入的数据写入列表中的所有元素,而不是一个元素,我真的很难弄清楚原因,感谢所有能够帮助我的人

public class Courts implements Serializable {

private static final long serialVersionUID = 1;
List<String[][]> allCourts = new ArrayList<String[][]>(10);

}
格式有点不稳定,很抱歉

我认为这应该做的是从courtNo-1索引的allCourts列表中获取2D数组,检查指定位置的字符串是否“可用”,以及是否将其设置为logged.name


然后它应该使用这个更新的2D数组并覆盖列表中的数组,唯一的问题是它将名称或数组写入allCourts列表中的每个元素,我不知道为什么,再次感谢您能为我提供的任何帮助。

我不确定它为什么会执行您提到的特定行为,因为对我来说,由于缺少初始化,它看起来应该只是抛出NullPointerException。我猜在某个地方,您正在初始化
allCourts
,以便所有元素都是相同的数组


但是,有些事情需要记住。在Java中,数组和其他任何东西一样只是一个对象
tmp
是对数组对象的引用,数组对象也被
allCourts
中存储在
courtNo-1
位置的引用所引用。调用集不会覆盖数组,它会覆盖数组引用,数组引用已经等于
tmp
。因此,
court.allCourts.set(courtNo-1,tmp)不执行任何操作。

嗨,很抱歉,我没有包含完整的代码,它已经初始化并填充了数据。所以基本上它是覆盖同一引用的引用,我仍然不明白为什么当我在其他地方遍历列表时,它会显示我为列表中的每个数组输入的名称..您是否已测试以确保列表中的所有引用都指向不同的数组?我只是将该数组复制到另一个数组中并设置该数组,工作正常,谢谢。
public String bookCourt(int courtNo,int day,int time) throws RemoteException{
    String [][] tmp = court.allCourts.get(courtNo - 1);

    if(tmp[day-1][time-1].equals("Available")){

        tmp[day-1][time-1] = logged.name;

        court.allCourts.set(courtNo - 1,tmp);
        return "Your booking has been accepted, booking is on (" + court.courtNames[courtNo - 1] + 
                                                               "),(" + court.days[day - 1] + ") at ("
                                                               + court.times[time - 1]  + ").\n";
    }

    return "Court already taken by " + tmp[day-1][time-1] + ".\n";
}