Javaで配列コピー
ねたって難しいね。書くことがあんまり思いつかない(笑。
というわけで、今日はJavaの配列コピーのお話。
Javaで配列コピーをしようとするときのコードは、ぱっと思いつく範囲で3パターン。
その1:普通にfor文使う方法
public static Integer [] copy(Integer [] src){ Integer [] result = new Integer[src.length]; for(int i = 0; i < src.length; i++){ result[i] = src[i]; } return result;
その2:System.arraycopyを使う方法
public static Integer [] copy(Integer [] src){ Integer [] result = new Integer[src.length]; System.arraycopy(src, 0, result, 0, result.length); return result; }
その3:cloneを使う方法
// Java 1.4以前の場合: public static Integer [] copy(Integer [] src){ return (Integer [])src.clone(); } // Java 5.0の場合: public static Integer [] copy(Integer [] src){ return src.clone(); }
その1はJava始めたての人向けで、APIをちゃんと見れるようになるその2かその3。Java5.0だとその3が綺麗な気がする。ってか、むしろstatic methodなんかにしねぇな。
でまぁ、どれが早いのか前から疑問だったので、実験してみました。WinXP、PenM 1.7G、Java 1.5.0_06で、1000000の長さのnull配列をコピーしてみた結果。1000回回して平均取ってみました。直前でSystem.gc呼んでなるべく途中でgcが動かないように注意してみた。
その1:32.47156441[ms] その2:24.838845982[ms] その3:31.362673201[ms]
どうやらその2が一番速いらしいです。ちょこちょこ書く分には気にしなくてもいいレベルだけど。すーごい重い計算とか、データが大量にあるときとかは、要注意・・・かな?