什么是最有效的方式?

时间:2010-07-30 10:52:31

标签: java arrays iteration

我有一个大小为N的数组array。对于它中的每3个索引,我想将它们取出并声明并将这些值分配给另一个大小为3的数组。然后我想回到那个数组并接下来的3并将它放在一个大小为3的不同数组中。对于3个不同的大小为3 a1,a2,a3的数组,我将这样迭代。一旦完成,我想清空a1,a2,a3和将NEXT 3值重新添加到3个大小为3的数组中,重复此操作直到达到array.length

这样做最好/最有效的方法是什么?

4 个答案:

答案 0 :(得分:7)

作为一般策略,我最初不会担心效率。

尽可能明确地对其进行编码,然后编写一系列单元测试,确认其有效。迭代地提高性能。

比快速编码更快,更容易制作正确的代码。

答案 1 :(得分:3)

for (int i=0; i<=N-9; i+=9) {
 System.arrayCopy(arrayN, i, a1, 0, 3);
 System.arrayCopy(arrayN, i+3, a2, 0, 3);
 System.arrayCopy(arrayN, i+6, a3, 0, 3);
 // presumably do other stuff here
}

这是一个非常脆弱但快速的方法。每次覆盖以前的值时,都不需要清除。如果您确实需要arrayN清除,则可以在循环后Arrays.fill(arrayN, null)

编辑:对于不那么脆弱的答案,我会假设你要膨胀m x n阵列。而不是硬编码a1,a2,... am,制作一个2D数组a[m][n]

for (i=0; i<=N-m*n; i+=m*n) {
 for (int j=0; j<m; j++) System.arrayCopy(arrayN, i+n*j, a[j], 0, n);
 // presumably do other stuff here
}

并且,正如Adrian在评论中所建议的那样,在循环之外声明i并使用其相对于N的值来适当地处理剩余物。

答案 2 :(得分:0)

for(int i = 0; i < ##; i++){if(i%3==0){startNewArray}}

答案 3 :(得分:0)

非常简单,你可以通过以下方式实现.... 它是下面的代码片段....

byte [] YourBigArray = new byte [SomeValue];

int temp = 0;

while(temp&lt; YourBigArray.size - 1) {     System.arrayCopy(YourBigArray,temp,smallarray,0,3);     温度+ = 3; }

尝试此代码并查看arrayCopy函数的文档....

享受.....