0

据我了解,关联数组存储键值对,并且长度可变。就像我们可以将任意数量的键值对添加到关联数组一样。

我还阅读了使用 while 循环遍历备用关联数组和 For 循环遍历密集关联数组。

关联数组如何稀疏它是动态的,我们正在向它添加值

4

2 回答 2

1

关联数组是稀疏的,因为它们是按照键的哈希顺序存储的,而不是按照插入的顺序存储的。数组是密集的,因为元素总是在添加时附加到末尾。当您在数组上执行诸如插入之类的操作时,您实际上是在创建一个新数组并附加值。这使得插入“昂贵”,因为它们需要更多的 CPU 时间来找到插入点,并且在插入发生时需要更多的内存来存储中间副本。使用关联数组插入(只要它不会将关联数组的大小扩展到哈希键大小之外)速度很快,因为它需要可预测的少量 CPU 和内存。数组昂贵的另一件事是通过其键查找特定值。使用关联数组,您可以快速查找任何元素(或立即知道没有具有该键的元素),而使用数组,您必须测试每个索引以了解元素的位置或是否存在。在小型系列上,这似乎没什么大不了的,但这些问题只会随着您的系列变得更大而变得更糟。不要认为关联数组是最好的也是唯一的方法。他们通过使用更多内存来提高速度。此外,迭代关联数组中的所有键(取决于数据类型实现)可能比迭代密集数组要慢。与往常一样,最好的建议是尝试为工作选择最好的工具。在小型系列上,这似乎没什么大不了的,但这些问题只会随着您的系列变得更大而变得更糟。不要认为关联数组是最好的也是唯一的方法。他们通过使用更多内存来提高速度。此外,迭代关联数组中的所有键(取决于数据类型实现)可能比迭代密集数组要慢。与往常一样,最好的建议是尝试为工作选择最好的工具。在小型系列上,这似乎没什么大不了的,但这些问题只会随着您的系列变得更大而变得更糟。不要认为关联数组是最好的也是唯一的方法。他们通过使用更多内存来提高速度。此外,迭代关联数组中的所有键(取决于数据类型实现)可能比迭代密集数组要慢。与往常一样,最好的建议是尝试为工作选择最好的工具。

于 2013-09-11T03:59:16.083 回答
1

关联数组是密集和稀疏的,具体取决于您如何索引它。

如果您使用主键或 pls_integer 或可以密集打包数据的东西对其进行索引,那么关联数组就会变得密集。并且获取数据会很快。

如果您按某个 varchar2 列或其他不易获取的列进行索引,那么该特定关联数组是稀疏的。

于 2013-09-11T06:10:55.770 回答