2010-01-30 67 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我知道這句話在語法上不是正確的,但它給了你一個問題的想法;)