我知道数组查找的时间复杂度为O(1),因此不能通过循环实现。程序是否存储数组索引的内存位置,或者如何立即查找索引?
数组元素在内存中总是以相等的间隔分布,因此根据索引查找元素需要乘以元素的大小并加上数组在内存中的基地址。这两个操作通常在硬件中通过采用适当的寻址模式在一条指令的时间内完成。
在数组中,每个元素都有一个内存地址。如果想要访问特定位置的元素,需要使用该元素的内存地址加上(索引位置 * 数组中元素大小)的计算结果。
尝试这个:
1. 数组是在堆中存储的连续内存位置,因为数组在Java中是对象。
2. 假设我有一个字符串数组作为实例变量
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}存储在堆上,并且将数组"arr"视为实例变量,将存在于堆上的对象内部。
现在
arr将保存数组的第一个元素1的地址。"arr"是一个对象引用数组变量,将位于对象内部,而{1,2,3,4,5}则位于堆外。
数组元素存储在连续的块中,如果它们增长,则需要将它们移动到新位置。然后使用从数组开始处的偏移量访问元素。
在C语言中,您可以使用两种不同的方法访问名为a的数组中索引i的元素:
int arrayElement = a[i];
int arrayElement = (int)(a + i * sizeof(int));
这基本上是Java底层实现的方式。