3

aformarrayなどの整数値の大きな配列をarrayにコピーしたいと思いますb。私はこれを行うためのいくつかの方法を見つけました:

int[] a = new int[]{1,2,3,4,5};
int[] b = new int[5];

System.arraycopy( a, 0, b, 0, a.length );

int[] a = new int[]{1,2,3,4,5};
int[] b = (int[])a.clone();

これはモバイルデバイスで行われるので、最も効率的に実行できるようにしたいと思います。

これを行うための最良の方法を教えてください。

4

5 に答える 5

9

System.arraycopyがより良い方法です。

理由: ネイティブコードを介して実装されているため、より効率的です。Josh Blochは、オブジェクトのコピー/クローン作成にclone()メソッドを使用しないように(Effective Javaで)提案しています。

plsはこれを参照します:効果的なJava:clone()メソッドの分析

于 2013-02-06T07:30:34.053 に答える
2

System.arraycopy(a、0、b、0、a.length); は最適化された優れた関数です。新しいオブジェクトを作成すると、実行速度が低下します。

于 2013-02-06T07:32:02.553 に答える
2

ええ、誰もがその方が良いと言っていますが、ほとんどの人は、Dalvik VM が Oracle VM ではなく、リンク先のソースが Oracle VM を参照していることarraycopy()を忘れがちです。私の推測では、それも速くなるでしょう。arraycopy()

でも

このコピーを最も最適化する必要がある場合は、両方の方法の時間を計って、それらがどのように機能するかを確認してください。本当の答えを本当に知りたいなら、それが常に進むべき道です。デバイスごとに動作が大幅に異なる可能性があるため、特にターゲットにしているデバイスでこれを行ってください。

于 2013-02-06T07:36:27.417 に答える
2

これが配列のコピーを作成する最良の方法だと思います

int[] b = Arrays.copyOf(a, a.length);
于 2013-02-06T07:42:34.093 に答える
1

System.arraycopy ネイティブ実装であり、クローン作成よりも効率的です。配列を単一でコピーできますmemorycopymemcpy)。

ウィキペディアで記事を探す-Javaクローン作成の不利な点と代替案

于 2013-02-06T07:31:10.280 に答える