为什么不能(不建议)使用Array创建关联数组(哈希表)

 

通过学习官方API和cookbook,我总结了如下原因:

1.从API中我们了解到,Array和Object都是动态类,也就是我们可以给他们动态添加属性。

var obj:Object = new Object();
obj.prop1 = "value1";
obj.prop2 = "value2";

//例子1
var array:Array = new Array();
array.prop1 = "value1";
array.prop2 = "value2";

  但是我们再看一个数组的例子:

//例子2
var array:Array = new Array();
array[0] = "value1";
array[1] = "value2";

 这个例子和上面的那个有什么不同?array的这两种使用方法在本质上是绝对不同的。例1使用的是array对象的属性来存储值(obj亦是),而例2使用的是array的元素来存储值。也就是说,array既有obj的动态属性的特性,又有自身的元素索引的特性,所以杀鸡焉用牛刀?同时又因为array比object多出很多封装的属性和方法,flash 虚拟机创建一个Array的开销大于创建一个Object的开销。而且这些属性和方法大多不能用于操作关联数组,既然用Object就可以实现关联数组,那又何必再去使用Array呢?

 

2.根据哈希表(散列表)的定义,哈希表中的元素是无序的(不然怎么叫做“散列”表呢 ^_^),而Array中的元素是有序的,特别适合创建索引数组。因此创建哈希表的最佳方法是采用Object.

你可能感兴趣的:(虚拟机,Flash)