当我们尝试访问数组元素时会发生什么?

时间:2015-12-08 15:20:39

标签: arrays associative-array

你可以通过查看标题来猜测我的意思。 我正在研究一些对数据等聚合数据类型进行操作的算法。我可以非常自信地说我知道阵列是什么以及为什么我们使用它们。但我不知道他们内部的工作方式。例如,当我这样做时会发生什么:

anArray [10];

幕后发生了什么?我的计算机是否直接达到第10个索引(看起来非常有效),或者它从0开始到达索引10,然后逐步前进直到它找到[10]。如果它直接执行,那么关联数组呢?关联数组中的键可以是一个字符串,对吗?计算机是否尝试从左到右匹配键,或直接到达方括号中的索引/键。

1 个答案:

答案 0 :(得分:0)

在通常的常用数组(FORTRAN,C,Java数组)中,您可以直接访问索引位置,而无需对其他元素进行任何迭代。对于一维数组,数组索引乘以数组成员大小,给出直接内存偏移量(从数组的开头算起)。 FORTRAN有equivalence运算符将1D数组放在2D数组(相同的内存位置)上,因此很明显这些是如何放置的。 C还允许通过指针访问数组,很明显,内存偏移量只是索引乘以元素的大小。

有些语言确实引入了与其他数据结构(地图)更相似的“数组”。它们通常通过哈希表实现并具有恒定的访问时间 - 比直接访问慢但不太依赖于数组中元素的数量。