将1D数组复制到2D数组

时间:2014-03-26 21:25:41

标签: java

使用C / C ++可以执行以下操作:

int arr[100];
int ar[10][10];
memcpy(ar, arr, sizeof(int)*100);

因为C / C ++标准保证数组是连续的,所以上面会将1D数组复制到2D数组。

这在Java中是否可行?

1 个答案:

答案 0 :(得分:2)

这在Java中是不可能的,因为Java中的多维数组实际上是一个数组数组。元素不存储在连续的内存块中。您需要逐行复制元素。

例如,以下是几种可能的技术之一:

int arr[100] = . . .;
int ar[10][10] = new int[10][10];
int offset = 0;
for (int[] row : ar) {
    System.arraycopy(arr, offset, row, 0, row.length);
    offset += row.length;
}

Java Language Specification, §15.10.1开始,以下是评估数组创建表达式new int[10][10]时发生的步骤(特别注意最后一点):

  
      
  • 首先,从左到右评估维度表达式。如果任何表达式评估突然完成,则不会评估其右侧的表达式。

  •   
  • 接下来,检查维度表达式的值。如果任何DimExpr表达式的值小于零,则抛出NegativeArraySizeException。

  •   
  • 接下来,为新阵列分配空间。如果没有足够的空间来分配数组,则通过抛出OutOfMemoryError突然完成对数组创建表达式的评估。

  •   
  • 然后,如果出现单个DimExpr,则创建一个具有指定长度的一维数组,并将该数组的每个组件初始化为其默认值(§4.12.5)。

    < / LI>   
  • 否则,如果出现n个DimExpr表达式,则数组创建会有效地执行一组深度为n-1的嵌套循环,以创建隐含的数组数组。

  •