2010-01-30 60 views
0

什么是写这个方法的更有效的方法:如果你没有如何使用System.arraycopy优化此方法?

static Foo[][] copy2D(Foo[][] in) 
{ 
    Foo[][] ret = new Foo[in.length][in[0].length]; 
    for(int i = 0;i < in.length;i++) { 
     for(int j = 0;j < in[0].length;j++) { 
      ret[i][j] = in[i][j].clone(); 
     } 
    } 
    return ret; 
} 

回答

5

有克隆(),你可以将其替换内

System.arraycopy(in[i], 0, ret[i], 0, in[0].length); 

但既然你'在你最内层的循环中创建一个新对象我没有看到任何其他的方式来做到这一点。

+0

@OldEnthusiast,好眼睛,我没有看到'.clone()'部分。 – 2010-01-30 21:55:34

0

也许阿帕奇commons库包含您的类ArrayUtilsmay帮助,但我注意到,你可能会遇到IndexOutOfBoundException如果这种说法是正确的:

(在1。长度|| [2]。长度|| in [n-1] .length)< in [0] .length

PS我知道这句话在语法上不是正确的,但它给了你一个问题的想法;)