0

これは、最近回答を得た質問 ( here ) に続く概念的な質問です。Javaの例を使用して質問を示しますが、これは他の同様の言語にも当てはまると思います(確かに言うことはできませんでした-誰かがこれを確認するか、そうでないことを願っています)。基本的に、次の可能な用途に微妙な違いがあるかどうか疑問に思っています(初期化方法を考えると):

double[] array1D = new double[max]

double[][] array2D = new double [max][1]

2 番目の配列を 1 列のみに初期化すると仮定すると、1D 配列が存在する必要は本当にあるのでしょうか? 2D 配列にはない性質を持っているのでしょうか、それとも私のような可哀想な人を混乱させるためだけにあるのでしょうか? array2Dさらに、1つの列だけでできないことができるかどうかを知りたいarray1Dですか?

4

6 に答える 6

2

array1D と array2D の主な違いは、後者では行 (または列、ただし見たい場合) が配列全体から独立して使用できる個別のオブジェクトであることです。

たとえば、行全体を関数に渡すことができ、関数は行を変更できます。1D 配列で同じことを行うには、元の配列、配列内の行の開始インデックス、および行の長さを渡す必要があります。

オブジェクトへのすべての参照には 4 バイトのコストがかかるため、要素ごとに 4 バイトずつメモリ使用量が増加します。そのため、1D 配列で実行できることに対して 2D 配列を使用するのはメモリの無駄です。

于 2013-02-15T07:55:04.597 に答える
1

new double[max] は、長さ = 最大の double の配列 (0.0 で初期化) を作成します。

new double [max][1] は、1 つの要素 = 0.0 の double 配列を指すポインターの配列を作成します。

于 2013-02-15T07:46:18.280 に答える
1
int A[2][3]={{1,2,3},{4,5,6}};

2D 配列は、次のようにメモリに格納されます。行 0 のエントリが最初に格納され、次に行 1 が格納されます。

ここに画像の説明を入力

2-D 配列は、n 個のブロックの連続したブロックとして表され、それぞれのサイズは m です (つまり、各ブロックに m 個の整数 (または任意のデータ型) を保持できます)。エントリは上記のようにメモリに格納されます。ここで、n は行数を表し、m は列数を表します。

Java の場合:

すべての配列と同様に、配列にメモリを割り当てるには new キーワードを使用する必要があります。例えば、

 int[][] a = new int[2][4];

この 2 次元配列には、2 つの行と 4 つの列があります。これにより、実際には 3 つのオブジェクトが割り当てられます。実際の行配列のそれぞれを保持する 2 つの要素からなる 1 次元配列と、行の内容を表す 4 つの要素からなる 2 つの 1 次元配列です。

 +-----+    +-----+-----+-----+-----+
 |a[0] | -> | [0] | [1] | [2] | [3] |
 |     |    +-----+-----+-----+-----+    In Java two-dimensional arrays are implemented is a  
                                        one-dimensional array of one-dimensional arrays -- like this.
 +-----+
 |     |    +-----+-----+-----+-----+
 |a[1] | -> | [0] | [1] | [2] | [3] |
 +-----+    +-----+-----+-----+-----+

あなたの場合:

double[][] array2D = new double [max][1]

これにより、実際には max+1 個のオブジェクトが割り当てられます。実際の行配列のそれぞれを保持する max 要素の 1 次元配列と、行の内容を表す 1 要素の max 1 次元配列です。

私が間違っているかどうか教えてください。

于 2013-02-15T07:49:26.730 に答える
0

配列が 2 次元であることは正常であるという誤解があるようです。本当じゃない。

プログラミング言語では 1 次元配列が標準ですが、2 次元以上の配列はかなりまれです (最後に Java でいつ使用したか思い出せません)。

1 次元配列の代わりに 2 次元配列を使用することも可能ですが、配列の意味がわかりにくくなり、配列要素へのアクセスがより複雑になります。

于 2013-02-15T07:45:26.373 に答える
0

どちらも同じことをするだけです。さらに、必要なのは 1 行だけの場合、2 次元配列を作成する必要はありません。複数の 1 次元配列を操作する必要がある場合は、2 次元配列が使用されます。

また、1次元配列で機能するようにするには、この方法で2次元を初期化する必要があると思います

double[][] array2D = new double[1][max]
于 2013-02-15T07:43:27.920 に答える
0

これが1D配列であると想像してください

1 2 3 4 5 6 7 8 9

これは2D配列です

1
2
3
4
5
6
7
8
9
  1 2 3 4 5 6 7 8 9

基本的に、2D配列は1D配列よりも多くのデータを格納でき、1D配列よりも複雑です

于 2013-02-15T07:44:21.017 に答える