使用.clone()复制2D数组仍然引用原始数据

Tro*_*eph 3 java arrays clone copy

好的,我知道之前已经问过这个问题:上一个问题

我还研究了其他几个主题和网站,他们似乎都创造了更多问题而不是答案.

Josh Bloch on Design - 一篇文章讨论.clone();

但我仍然无法解决我的问题.

当我克隆我的2D数组时:

values = Map.mapValues.clone();
Run Code Online (Sandbox Code Playgroud)

我仍然无法安全地修改内容,values因为它仍然修改了内容Map.mapValues.

有没有办法复制一个比我更有效的数组,每次只是从头开始重新创建一个?

谢谢

NPE*_*NPE 7

在Java中,2D数组是对一维数组的引用数组.Map.mapValues.clone()只克隆第一层(即引用),因此最终得到一个新的相同底层1D数组的引用数组.这就是您尝试使用clone()不起作用的原因.

解决这个问题的一种方法是克隆底层的1D数组:

byte[][] values = Map.mapValues.clone();
for (int i = 0; i < values.length; i++) {
  values[i] = values[i].clone();
}
Run Code Online (Sandbox Code Playgroud)