我有很多带有大double[][]
数组的旧代码,我需要在double[]
数组中展平以获得新的库使用。
我不想复制,是否有一种简单的方法可以像在C中那样重新引用数组?
答案 0 :(得分:2)
没有副本是不可能的。
double[][]
的内存不连续。
double[][]
中的“行”是指double[]
个对象。
double[]
占用的内存必须是连续的。
答案 1 :(得分:0)
没有。如果没有副本 1 ,这是不可能的。
与C中的Nd数组不同,其中数学被执行以映射到单个连续对象(因此强制转换可能有效;但要求C语言律师), Java中的“2d”数组是一个数组(对象)-of-数组(许多对象)。这扩展了每个额外的维度。
也就是说,Java中的2d数组可以是C中的double* []
,其中辅助轴的每一行/列都是单独的malloc;并且访问单元格需要两次查找操作,即使它仍然“看起来”像double[][]
访问。
1 因为Java不允许运算符(即。[])重载甚至尝试包装1d-to-Nd访问不再像数组那样,而是List / /数组列表。在任何情况下,这仍然需要在下面进行单独查找。