作者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
推 etrexetrex:wow 我不知道他有作 sparse 耶 10/10 09:57
→ cjcat2266:看看a[1000000] = 10會不會lag就知道有沒有做sparse囉~ 10/10 10:48