私はのコード化経験があります。C++です。 最近、私はJavaを学ぼうとしてきました。JAVA:配列次元に関する時間係数
私はオンラインジャッジで簡単な問題を練習していました。 問題には2×1000000次元の配列が必要です。 私は、配列宣言:
int ara[][]=new int[1000000][2]
をが、コードは3秒の制限時間内に収まらない可能性があり、制限時間は非常に最初のテストケースに評決を超過ました。
は、その後、私はちょうどこのような寸法を切り換える:
int ara[][]=new int[2][1000000]
し、それに応じてコードを変更し、コードを受け付けました。
私は最初のコードがタイムリミットを超過した唯一の理由だと思っていました。
int ara[][]=new int[1000000][2]
とint ara[][]=new int[2][1000000]
の違いは何ですか? なぜこれらの配列宣言の間に巨大な時間差がありますか?
もっと速いと思いますか?それぞれ2つの値を持つ1000000配列を割り当てるか、それぞれ1000000の値を持つ2つの配列を割り当てますか?どうしてそう思うの? –
C++から来て、おそらく 'int [3] [5]'は2次元配列だと思います。そうではない。これは配列の配列です。内部的には大きな違いですが、機能的には2D配列のように振る舞います*。しかし、配列の配列であるため、各セカンダリ配列は実際には異なるサイズであり、純粋な2D配列ではできません。 [JLS 15.10.2](https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.10.2)および例15.10.2-2を参照してくださいシーンの後ろに何が起こっているのか見てみましょう。 – Andreas