配列ルックアップにはO(1)時間がかかるので、ループすることはできません。プログラムは配列のインデックスのメモリ位置を保存しますか、それともインデックスを瞬時にどのように表示しますか?
4 に答える
配列要素は常にメモリ内で等間隔に配置されるため、インデックスが指定された要素を見つけるには、要素のサイズを乗算し、メモリ内に配列のベースを追加する必要があります。両方の操作は、適切なアドレッシングモードを使用することにより、ハードウェアの単一の命令のスペース内で実行されることがよくあります。
下に...そのメモリアドレス+(インデックス位置*配列内のもののサイズ)
これを試して、
1. Arrays are consecutive memory locations which are stored in Heap, as Arrays are
objects in java.
2. Assume i have an Array of String as an instance variable
String [] arr = {1,2,3,4,5};
今はこんな感じ
arr [0] = 1
arr [1] = 2
arr [2] = 3
arr [3] = 4
arr [4] = 5
{1,2,3,4,5} are stored over the heap, and Considering array "arr" as instance
variable, will lives within the object on the heap.
Now
arrは、配列の最初の要素である1のアドレスを保持します。オブジェクト参照配列変数である「arr」はオブジェクトの内側にあり、{1,2,3,4,5}はヒープのどこかにあります。
配列要素は連続したブロックに格納されます。それらが大きくなる場合は、新しい場所に移動する必要があります。次に、配列の開始位置からのオフセットを使用して要素にアクセスします。
Cでは、次の2つの異なる方法を使用して、aと呼ばれる配列内のインデックスiの要素にアクセスできます。
int arrayElement = a[i];
int arrayElement = (int)(a + i * sizeof(int));
これは、多かれ少なかれ、内部でJavaで行われる方法です。