ActionScript3.0(AS3)中的泛型数组Vector
Adobe官方并没有"泛型数组"的叫法,这是我自己对Vector的叫法(有点标题党),不过Vector在使用上确实跟c#中的泛型数组有些相似之处。
我们知道:ActionScript3.0中的Array数组可以存放多种类型,甚至在同一个Array数组中,可以同时存入String,Object,Number...,但其实我们在实际开发中,通常一个数组中所保存的元素类型都是一致的,为了改进这种情况下的效率,AS3.0新增了一个Vector类。
它强制要求数组中的每个元素都必须是同样的类型,从而省去了“装箱”、“拆箱”之类的操作,提高了性能。
下面这一段测试代码演示了Vector与Array的性能差异:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | 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,性能能提升一倍左右。
作者:菩提树下的杨过
出处:http://yjmyzz.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://yjmyzz.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步