ActionScript3.0(AS3)中的泛型数组Vector

简介: Adobe官方并没有"泛型数组"的叫法,这是我自己对Vector的叫法(有点标题党),不过Vector在使用上确实跟c#中的泛型数组有些相似之处。   我们知道:ActionScript3.0中的Array数组可以存放多种类型,甚至在同一个Array数组中,可以同时存入String,Object,Number...,但其实我们在实际开发中,通常一个数组中所保存的元素类型都是一致的,为了改进这种情况下的效率,AS3.0新增了一个Vector类。

Adobe官方并没有"泛型数组"的叫法,这是我自己对Vector的叫法(有点标题党),不过Vector在使用上确实跟c#中的泛型数组有些相似之处。

 

我们知道:ActionScript3.0中的Array数组可以存放多种类型,甚至在同一个Array数组中,可以同时存入String,Object,Number...,但其实我们在实际开发中,通常一个数组中所保存的元素类型都是一致的,为了改进这种情况下的效率,AS3.0新增了一个Vector类。

 

它强制要求数组中的每个元素都必须是同样的类型,从而省去了“装箱”、“拆箱”之类的操作,提高了性能。

 

下面这一段测试代码演示了Vector与Array的性能差异:

 

var count:uint=50000;
var v:Vector.<String>=new Vector.<String>(count);//泛型数组Vector的声明方法
var aStr:Array=new Array(count);
var aObj:Array = new Array(count);
var i:uint=0,j:uint=100;
var t:String="";

//初始化
for (i=0; i<count-1; i++) {
	v[i]=Math.random().toString();
	aStr[i]=v[i];
	aObj[i] = {"a":v[i]};
}

//开始测试--Vector
var startTime=getTimer();
var elapsed:uint=0;

while (j--) {
	for (i=0; i<count-1; i++) {		
		t=typeof v[i];
	}
}
elapsed=getTimer()-startTime;
trace(t);
trace("Vector<String>耗时:",elapsed,"\n");

//开始测试--Array(String)
j=100;
startTime=getTimer();
while (j--) {
	for (i=0; i<count-1; i++) {
		t=typeof aStr[i];
	}
}
elapsed=getTimer()-startTime;
trace(t);
trace("Array(String)耗时:",elapsed,"\n");

//开始测试--Array(Object)
j=100;
startTime=getTimer();
while (j--) {
	for (i=0; i<count-1; i++) {
		t=typeof aObj[i];
	}
}
elapsed=getTimer()-startTime;
trace(t);
trace("Array(String)耗时:",elapsed,"\n");

输出结果:

string
Vector<String>耗时: 74

string
Array(String)耗时: 112

object
Array(Object)耗时: 193

很明显:在数组元素类型相同的前提下,使用Vector来代替Array,性能能提升一倍左右。

目录
相关文章
|
存储 Cloud Native Linux
C++ vector元素类型为什么不能是引用
C++ vector元素类型为什么不能是引用
|
算法 Java C++
27.【C/C++ 最全vector数组的用法 (详解)】(一)
27.【C/C++ 最全vector数组的用法 (详解)】
280 0
|
6月前
|
JavaScript 前端开发 索引
在JavaScript中,可以使用数组字面量或Array构造函数来创建一个数组对象
【4月更文挑战第16天】在JavaScript中,可以使用数组字面量或Array构造函数来创建一个数组对象
66 4
|
6月前
|
存储 C++ 索引
C++ 标准库类型之vector类型
C++ 标准库类型之vector类型
42 0
关于Delphi中的静态数组、动态数组、检测数组上下界、copy数组
关于Delphi中的静态数组、动态数组、检测数组上下界、copy数组
263 0
关于Delphi中的静态数组、动态数组、检测数组上下界、copy数组
|
存储 安全 Java
Array中可以用泛型吗
Array中可以用泛型吗
593 0
|
API iOS开发
iOS - 如何深拷贝Array内元素、自定义对象、及自定义对象的属性(上)
关于深拷贝、浅拷贝,请看上篇iOS - 深拷贝、浅拷贝探索验证
|
编译器 C# Swift
Objective—C语言的新魅力——Nullability、泛型集合与类型延拓(二)
Objective—C语言的新魅力——Nullability、泛型集合与类型延拓
195 0
Objective—C语言的新魅力——Nullability、泛型集合与类型延拓(二)
|
编译器 开发工具 C语言
Objective—C语言的新魅力——Nullability、泛型集合与类型延拓(一)
Objective—C语言的新魅力——Nullability、泛型集合与类型延拓
142 0
Objective—C语言的新魅力——Nullability、泛型集合与类型延拓(一)