程序如何定位数组的索引?

时间:2012-06-27 02:55:14

标签: java arrays

我知道数组查找有O(1)时间,所以它不能循环。程序是否存储数组索引的内存位置,或者它如何瞬时查看索引?

4 个答案:

答案 0 :(得分:9)

数组元素在内存中始终以相等的距离间隔,因此查找给定索引的元素需要乘以元素的大小并在内存中添加数组的基数。这两种操作通常通过采用适当的寻址模式在硬件中的单个指令的空间内完成。

答案 1 :(得分:3)

...下方 它的内存地址+(索引位置*数组中事物的大小)

答案 2 :(得分:0)

试试这个,

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}位于堆上的某个位置。

答案 3 :(得分:0)

数组元素存储在一个连续的块中,如果它们增长,则需要将它们移动到一个新的位置。然后使用数组开始处的偏移量访问元素。

在C中,您可以使用两种不同的方法访问名为 a 的数组中索引 i 的元素:

  • int arrayElement = a[i];
  • int arrayElement = (int)(a + i * sizeof(int));

这或多或少都是用Java来完成的。