2017-06-07 34 views
0

私はデータ構造として配列について学習しています。私は、インデックスの配列内の要素をJavaでどのくらい正確に取得するのかに興味があります。以下のコードが実行されるときにボンネットの下に何が起こっている配列内の要素をインデックスで取得する方法は?

... 
int i = array[2]; 

どのようにJVM格納refferences配列のプリミティブ型へ?私たちはO(1)の要素をどのように取得しますか? JVMは要素の相対的な位置を他の要素と比較して計算しますか?

+2

https://stackoverflow.com/documentation/java/99/array#t = 201706071240291279792 – Blasanka

+1

array [2]はメモリ内の特定の場所を指しています。値がどこにあるのか分かっていれば、O(1)が達成されます。もちろん、内部的にメモリがどのように処理されるかは、別の話ですが、java – nafas

+0

に関連しています。メモリに格納されている実際の要素へのポインタを返します。 'array'を参照すると、Javaはその配列を探します。 'array [2]'と言うと、Javaは対応する要素を見つけるために配列から該当するポインタを読み込みます。プリミティブの場合、メモリに格納されている実際のアイテムの連続した配列があります。私は答えを掲示したいと思いますが、私はそれを今正しく説明するために絵を描く気がしません。 – Dukeling

答えて

0

int []、double []などの配列はネイティブ配列です。 ネイティブ配列への参照は、その最初の要素への参照です。 インデックス「i」を持つ要素は、逆参照(「最初の要素の参照」+ i * sizeOf(「包含された型」)によって取得されます。

p.s. Javaでは、境界をチェックしたり、長さを調べたりするために、他のクラスにラップされています。 C++のような低レベルのプログラミング言語では、配列の長さよりも索引で要素を変更しようとすると、プログラムが壊れてしまう可能性があります。

関連する問題