プログラムdeタマゴ

nodamushiの著作物は、文章、画像、プログラムにかかわらず全てUnlicenseです

超今更なことで、あ〜るぇ〜?

そろそろ、JAVAをさわり初めて一年がたとうとしている今日この頃、何と私ようやく無名配列なる物を知りましたwww

恥ずかしいっ( >д<)

というのも、プログラム中で、変数を配列化して返すだけの関数を作るとき

public int get(){
int
a = {x,y,z};
return a;
}

っていう風に今までやっていたんですよ。
で、このint aを書くのが面倒くせぇ!ということで、適当に

return int
{x,y,z};

って書いてみたんですよ。

物の見事にエラーwwww

じゃぁ、new付けたら良くねwww(←適当)

return new int[] {x,y,z};
……コンパイル完了
って、通ったしwwwww

いやぁ〜、素で知らなかった。
調べてみれば無名配列という歴とした文法だったのでした。
名前空間を作らない分早くなる……様な気がする。
知らんけど。知らないならやってみよう。

public class TEST {
public static void main(String[] args) {
int i = 0,n = 1000000000;
long s1,s2,e1,e2;
s1 = System.currentTimeMillis();
while(i<n){
a();
i++;
}
e1 = System.currentTimeMillis();
i = 0;
s2 = System.currentTimeMillis();
while(i<n){
b();
i++;
}
e2 = System.currentTimeMillis();
System.out.println(e1-s1);
System.out.println(e2-s2);
}

public static int[] a(){
return new int[] {1,2,3,4};
}
public static int[] b(){
int[] a = {1,2,3,4};
return a;
}
}

というわけで、無名配列を返す関数、名前を付けてから配列を返す関数を双方10億回くり返してみた。双方の処理時間(ミリ秒)を計って出力する。

結果
12531
11672

上が無名配列、下が名前を付けて返す配列である。
結果はごらんの通り、私の予想通り無名配列の方が……


遅い!!?


あるぅえええええ?(´・ω・`)


納得がいかん!!
というわけで、a() (無名配列)とb() (配列に名前を付ける)の実行順序を逆にしてみた。

結果
12562
11703

……( ´∀`)

考察

名前付けるかどうかなんて誤差にもならない。
こんな事よりもバックグラウンドで動いているタスクや、iの値を増やして比較する方が影響力が大きい。ちなみに、バックグラウンドで聞いてた曲はFUKKY MONKEY BABYSのナツミ。季節が全然違う気がするのは激しく気のせい。
ちなみに、1ループの平均が0.000000001秒程度という事が分かった。早いね。


結論
1回動かすのに待った空白の20秒弱が無駄だった。


ということでバイなら〜( ´∀`)/~~


おまけ〜ちょっとまじめに考察してみた〜

どうも、立ち上がり時のJAVAその物の不安定さが結果に影響しているっぽいので、計測する前に空ループを数秒挟んで安定してから計ってみた。
10億回のループで無名配列は11.656秒。配列に名前を与えてから返すのは11.719秒。何回かくり返したが、大体この時間で落ち着いた所を見ると、やはり無名配列で返す方が効率は良いようだ。が、やっぱり誤差の範囲内でしかないことに変わりはない。