作者cjcat2266 (CJ Cat)
看板Flash
标题Re: [问题] 我想比较两个阵列的不同?
时间Sun Oct 10 09:48:19 2010
※ 引述《etrexetrex (moonet)》之铭言:
: //加速在这里
: if(b[i] >= inverseALength)
补充说明一下
其实这里不一定会完全加速喔
: //基本上 Array 的存取也会比 Object 快些
要看你的array是不是sparse array
意思就是你是否每一个element都有明确给值
一个Array物件内部底层其实分成一个阵列和一个binary search tree (dictionary)
从第0个开始的元素到最後一个连续的元素,是存在阵列
剩下的元素则是存在binary search tree里面
这样才不会浪费记忆体去存取undefined元素
如以下的code
a[0] = 0;
a[1] = 1;
a[2] = 2;
那麽三个连续元素是储存在底层阵列没错
存取起来速度会很快
但是以下code
a[0] = 0;
a[10] = 1;
a[12] = 2;
只有a[0]是存在底层阵列
a[10]和a[12]是存在底层的binary search tree
存取起来的效能量级就是跟Object和Dictionary一样的
再如
a[10000] = 1;
所消耗的记忆体不是10000个Number
而是只有一个Number而已,是用底层的binary search tree在存
所以如果真的要龟毛
你应要一开始把aInverse的所有元素都先初始化成-1或其他值
才可以真正得到array效能上的优势
我记得以上豆知识是在Senocular的blog上看到的 :)
--
CJ Cat = Croa'J Cat = Cockroach Cat = 西街凯特 = 蜚蠊猫 = 蟑螂猫
Blog
http://cjcat.blogspot.com
Gallery
http://cjcat2266.deviantart.com
ptt2 Board CJWorkshop - 阿多比闪光(Adobe Flash)研讨区
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.168.25.10
1F:推 etrexetrex:wow 我不知道他有作 sparse 耶 10/10 09:57
2F:→ cjcat2266:看看a[1000000] = 10会不会lag就知道有没有做sparse罗~ 10/10 10:48