Java 寻找更新多维数组的有效方法
我更新多维数组(Y[I][t][k])的值。由于更新需要经过多次迭代,因此这部分代码的运行时非常重要。我想知道是否有人知道如何以更有效的方式来做这件事 下面是需要更新的部分Java 寻找更新多维数组的有效方法,java,arrays,eclipse,for-loop,multidimensional-array,Java,Arrays,Eclipse,For Loop,Multidimensional Array,我更新多维数组(Y[I][t][k])的值。由于更新需要经过多次迭代,因此这部分代码的运行时非常重要。我想知道是否有人知道如何以更有效的方式来做这件事 下面是需要更新的部分 double [][][] Y=new double [a.length][b.length][c.length]; for(int i=0;i<a.length;i++){ for(int j=0;j<b;j++){ for (int k=0; k<c.length; k++){ if(i=
double [][][] Y=new double [a.length][b.length][c.length];
for(int i=0;i<a.length;i++){
for(int j=0;j<b;j++){
for (int k=0; k<c.length; k++){
if(i==w && j==r && k==u){// w, r and u can have any value.
Y[i][j][k]=g;
}else{
Y[i][j][k]=f;
}
}
}
}
您正在设置多维数组区域的每个元素,成本与设置的元素数成比例,因此没有理由认为您可以渐进地做得更好。然而,通过使用批量操作方法,并通过在循环之外处理特殊情况,而不是在每次迭代中对其进行测试,您可能会获得一些速度提高。比如说,
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < b.length; j++) {
Arrays.fill(Y[i][j], 0, c.length, f);
}
}
if (c.length > 10) {
Y[0][0][10] = g;
}
如果expression
f
不满足上述要求,那么您所能做的最好的事情就是将特例从循环中取出,而不改变任何其他内容。对于某些表达式f
和/或g
,即使这样也可能不可能,因为它可能产生不等价的结果。例如,在这种情况下,一个或两个元素以某种相关方式是有状态的,例如通过在计数器上关闭。正如我从您的代码中理解的那样,您的目标是将Y[0][0][10]设置为g,将其他元素设置为f
那么,忘掉疯狂的循环,像下面的代码那样做怎么样
Arrays.fill(Y, f);
Y[0][0][10] = g;
变量
Y
的数据类型是什么?变量g
和f
以及a
、b
和c
的数据类型是什么?请使用更完整的示例程序更新您的帖子。最小的更改是在most内部循环中删除if
语句,只需在整个数组中迭代,将元素设置为f
,然后设置Y[0][0][10]
到g
的c.长度应大于10。去掉if语句可能会有很大的不同,除非java编译器为您提供了它。我会检查两种方式,看看是否有时差。如果“b为int”,什么是b.length
?感谢您的观察。正确的。它是“b”而不是“b.length”。人们可能会使用Arrays.fill()
,但是如果f
的类型对于Y[i][j][k]
的赋值是正确的,那么几乎可以肯定使用数组是不正确的。fill(Y,f)
。如果c.length
小于或等于10怎么办?
for (int i = 0; i < a.length; i++) {
Arrays.fill(Y[i][0], 0, c.length, f);
for (int j = 1; j < b.length; j++) {
System.arraycopy(Y[i][0], 0, Y[i][j], 0, c.length);
}
}
if (c.length > 10) {
Y[0][0][10] = g;
}
Arrays.fill(Y, f);
Y[0][0][10] = g;