doubleの配列の配列と、doubleの配列をクラスで包んだクラスではどちらが速いかを試してみました。
つまり、配列の配列を仮に2次元配列とみて、クラスで同様に実装した場合はどうなるかを検討しました。
比較的単純な実装の元でやってみた結果は以下の通り。
- 配列の配列(4000*1000) : 46ms
- 実装された配列(4000*1000) : 109ms
これを見る限りでは、配列の配列の方が速いことがわかります。配列の構成を変えてもう一度。
- 配列の配列(40000*100) : 31ms
- 実装された配列(40000*100) : 109ms
やはり、クラスでラッパーされているため、関数呼び出しのためのオーバーヘッドが大きいのでしょうか。
テストケースは下記の通りです。
double[][] array = new double[40000][100]; long time = System.currentTimeMillis(); int length0 = array.length; int length1 = array[0].length; for(int i=0;i<length0;i++){ for(int j=0;j<length1;j++){ array[i][j] = i*length1+j; } } for(int i=0;i<length0;i++){ for(int j=0;j<length1;j++){ double val = array[i][j]; } } time = System.currentTimeMillis() - time; System.out.println(time);
コメントする