我想在比N ^ 2成比例的时间内复制一个数组。我现在正在使用双循环...
int[][] copy = new int[N][N];
for(int i = 0; i < N; i++){
for(int j = 0; j < N; j++){
copy[i][j] = original[i][j];
}
}
有更快的方法吗?
答案 0 :(得分:0)
int[][] copy = new int[N][N];
for(int i = 0; i < N; i++){
System.arrayCopy(original[i], 0, copy[i], 0, N);
}
答案 1 :(得分:0)
Java是JIT编译的,本机代码编译器可以做各种聪明的事情来简化循环。因此,arraycopy的实现并没有明显的区别。
所以@Brett Okken提供的答案不一定要比你的快。但要“确定”你可以用自己的方式。这是“最快的”。
System.arrayCopy(original[i], 0, copy[i], 0, N);
答案 2 :(得分:0)
我知道我迟到了,但也许这对大多数人有用:
如果您只是将数据存储在新阵列上,因为您使用的阵列已满,这意味着步骤如下: 1 - 分配一个新的更大的数组; 2 - 将旧数组中的值复制到新数组中; 3 - 将变量“指向”新数组。
我见过这个算法:
int[][] newArray = new int[oldArray.length + 1][];
for (int n = oldArray.length; n-- != 0; newArray[n] = oldArray[n]) {}
oldArray = newArray;
这里的想法不是复制值,而是“指向”它们,当更大的结构是 3d 数组时,这特别有用。似乎这个算法是最快的。 如果您不想更改初始数组,这没有用,因为很明显,选项是发送原始数组的副本。
必须提到的是,我看到了这段代码,或者在名为“fastUtil”的 API 中看到了一些接近的东西。它可用 here
如果我说了什么废话,请随时纠正我。