6

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

4

4 回答 4

9

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

于 2012-06-27T02:57:28.730 回答
3

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

于 2012-06-27T02:57:20.603 回答
0

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

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

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

这或多或少是如何在 Java 中完成的。

于 2012-06-27T03:24:40.240 回答
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

字符串[] 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 将保存 Array 的第一个元素的地址 1“arr”是一个对象引用数组变量,将在对象内部,而 {1,2,3,4,5} 在堆的某个位置之外。

于 2012-06-27T03:11:13.290 回答