Java 以最快、最有效的方式获取2D矩阵的子矩阵

Java 以最快、最有效的方式获取2D矩阵的子矩阵,java,Java,我知道以前有人问过这个问题,但我只是想澄清一些事情。我想得到二维矩阵的子矩阵,表示为int[][]。我看到了一个方法,可以围绕int[][]数据类型创建一个包装类,这样就不需要多余的内存,只需通过引用获得2D矩阵。我的问题是,这与执行Array.copyOf()不同吗?我的理解是,Array.copyOf()创建矩阵的浅拷贝。我认为这是内存效率更低的原因,因为您仍然在创建一个数组,它只保存引用而不是实际数据 您使用的是原语,而不是引用,因此不涉及浅层副本。包装器类共享数组,避免任何和所有复制。然

我知道以前有人问过这个问题,但我只是想澄清一些事情。我想得到二维矩阵的子矩阵,表示为
int[][]
。我看到了一个方法,可以围绕
int[][]
数据类型创建一个包装类,这样就不需要多余的内存,只需通过引用获得2D矩阵。我的问题是,这与执行
Array.copyOf()
不同吗?我的理解是,
Array.copyOf()
创建矩阵的浅拷贝。我认为这是内存效率更低的原因,因为您仍然在创建一个数组,它只保存引用而不是实际数据

您使用的是原语,而不是引用,因此不涉及浅层副本。包装器类共享数组,避免任何和所有复制。然后对于这个包装器类,我将包含一个方法来索引到主数组中。如果我多次调用此方法,那么调用此方法与直接索引到数组中是否有显著区别?创建一个
矩阵
对象或创建多个数组对象并复制原语之间是否有区别?是的,这有很大的区别。如果你在追求效率,为什么你那么热衷于抄袭?如果你想要一个可变的子矩阵,那么你必须复制。如果一个不可变的子矩阵就足够了,那么您将希望避免任何复制,并且链接中的解决方案也很好。