Java double [] []加倍[]无副本

时间:2015-07-10 09:19:20

标签: java arrays

我有很多带有大double[][]数组的旧代码,我需要在double[]数组中展平以获得新的库使用。 我不想复制,是否有一种简单的方法可以像在C中那样重新引用数组?

2 个答案:

答案 0 :(得分:2)

没有副本是不可能的。

  1. double[][]的内存不连续。

  2. double[][]中的“行”是指double[]个对象。

  3. double[]占用的内存必须是连续的。

答案 1 :(得分:0)

没有。如果没有副本 1 ,这是不可能的。

与C中的Nd数组不同,其中数学被执行以映射到单个连续对象(因此强制转换可能有效;但要求C语言律师), Java中的“2d”数组一个数组(对象)-of-数组(许多对象)。这扩展了每个额外的维度。

也就是说,Java中的2d数组可以是C中的double* [],其中辅助轴的每一行/列都是单独的malloc;并且访问单元格需要两次查找操作,即使它仍然“看起来”像double[][]访问。

1 因为Java不允许运算符(即。[])重载甚至尝试包装1d-to-Nd访问不再像数组那样,而是List / /数组列表。在任何情况下,这仍然需要在下面进行单独查找。