ActionScript3.0(AS3)中的泛型数组Vector
Adobe官方并没有"泛型数组"的叫法,这是我自己对Vector的叫法(有点标题党),不过Vector在使用上确实跟c#中的泛型数组有些相似之处。
我们知道:ActionScript3.0中的Array数组可以存放多种类型,甚至在同一个Array数组中,可以同时存入 String,Object,Number...,但其实我们在实际开发中,通常一个数组中所保存的元素类型都是一致的,为了改进这种情况下的效 率,AS3.0新增了一个Vector类。
它强制要求数组中的每个元素都必须是同样的类型,从而省去了“装箱”、“拆箱”之类的操作,提高了性能。
下面这一段测试代码演示了Vector与Array的性能差异:
01 |
var count:uint=50000; |
02 |
var v:Vector.<String>=new Vector.<String>(count);//泛型数组Vector的声明方法 |
03 |
var aStr:Array=new Array(count); |
04 |
var aObj:Array = new Array(count); |
05 |
var i:uint=0,j:uint=100; |
06 |
var t:String=""; |
07 |
08 |
//初始化 |
09 |
for (i=0; i<count-1; i++) { |
10 |
v[i]=Math.random().toString(); |
11 |
aStr[i]=v[i]; |
12 |
aObj[i] = {"a":v[i]}; |
13 |
} |
14 |
15 |
//开始测试--Vector |
16 |
var startTime=getTimer(); |
17 |
var elapsed:uint=0; |
18 |
19 |
while (j--) { |
20 |
for (i=0; i<count-1; i++) { |
21 |
t=typeof v[i]; |
22 |
} |
23 |
} |
24 |
elapsed=getTimer()-startTime; |
25 |
trace(t); |
26 |
trace("Vector<String>耗时:",elapsed,"\n"); |
27 |
28 |
//开始测试--Array(String) |
29 |
j=100; |
30 |
startTime=getTimer(); |
31 |
while (j--) { |
32 |
for (i=0; i<count-1; i++) { |
33 |
t=typeof aStr[i]; |
34 |
} |
35 |
} |
36 |
elapsed=getTimer()-startTime; |
37 |
trace(t); |
38 |
trace("Array(String)耗时:",elapsed,"\n"); |
39 |
40 |
//开始测试--Array(Object) |
41 |
j=100; |
42 |
startTime=getTimer(); |
43 |
while (j--) { |
44 |
for (i=0; i<count-1; i++) { |
45 |
t=typeof aObj[i]; |
46 |
} |
47 |
} |
48 |
elapsed=getTimer()-startTime; |
49 |
trace(t); |
50 |
trace("Array(String)耗时:",elapsed,"\n"); |
输出结果:
string
Vector<String>耗时: 74
string
Array(String)耗时: 112
object
Array(Object)耗时: 193
很明显:在数组元素类型相同的前提下,使用Vector来代替Array,性能能提升一倍左右。
作者:菩提树下的杨过
出处:http://yjmyzz.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://yjmyzz.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

浙公网安备 33010602011771号