2D配列を作成するとき、行または列が最初に指定されているかどうかをどのように覚えていますか?
Javaは「行メジャー」と見なされます。つまり、行を最初に処理します。これは、2D配列が「配列の配列」だからです。
例えば:
int[ ][ ] a = new int[2][4]; // Two rows and four columns.
a[0][0] a[0][1] a[0][2] a[0][3]
a[1][0] a[1][1] a[1][2] a[1][3]
次のように視覚化することもできます。
a[0] -> [0] [1] [2] [3]
a[1] -> [0] [1] [2] [3]
2番目の図は、「配列の配列」の側面を示しています。最初の配列には{a[0] and a[1]}
が含まれ、これらはそれぞれ4つの要素{[0][1][2][3]}
を含む配列です。
TL; DRサマリー:
Array[number of arrays][how many elements in each of those arrays]
詳細については、配列-2次元も参照してください。
マットBはある意味で真実かもしれませんが、幾何学的なマトリックスをまったく考えずにJava多次元配列を考えるのに役立つかもしれません。 Java multi-dim配列は単に配列の配列であり、最初の「次元」の各要素は他の要素とは異なるサイズにすることができ、実際にはnullの「サブ」配列を格納できます。 この質問 の下のコメントを参照してください
本能的には、水平(X)軸と垂直(Y)軸のように幾何学的に考えます。ただし、2D配列の場合はそうではなく、行が最初になり、次に列が続きます。
次の例えを考えてみましょう:幾何学では、梯子まで歩いて(X軸)登ります(Y軸)。逆に、Javaでは、はしごを下って(行)立ち去ります(列)。
すべては、アレイの視覚化に依存します。行と列は、配列そのものではなく、配列のvisualization(おそらく想像力)のプロパティです。
数字「5」が赤か緑かを尋ねるのとまったく同じですか?
私はそれを赤く描くことができました、私はそれを貪欲に描くことができましたか?色は数値の不可欠な特性ではありません。同様に、2D配列を行と列のグリッドとして表すことは、この配列の存在に必要ありません。
2D配列にはfirst dimentionとsecond dimention、それらの視覚化に関連するものはすべて純粋にあなたの味です。
Char配列char[80][25]
がある場合、スクロールせずに画面に収まる80文字の25行を持つように回転させてコンソールに印刷することができます。
実行可能なものを提供しようとします行と列として2D配列を表す場合はまったく意味がありません:1 000 000 000整数の配列が必要だとしましょう。私のマシンには8GBのRAMがあるので、これに十分なメモリがありますが、var a = new int[1000000000]
を実行しようとすると、ほとんどの場合OutOfMemory例外が発生します。これはメモリの断片化のためです-このサイズのメモリの連続したブロックはありません。代わりに、値を使用して2D配列10 000 x 100 000を作成できます。論理的には1D配列なので、単一の値のシーケンスとして描画して想像したいのですが、技術的な実装により2Dです。
Javaには、多次元配列はありません。配列の配列があります。そう:
int[][] array = new int[2][3];
実際には2つの配列で構成され、各配列には3つの要素があります。
Javaでは、2次元配列は2つの別個の配列と見なされるため、行が最初に実行されます。最初の行1次元配列から始まります。