[Access time comparison #3] Array vs Object (Element type:String)

by inosyan
1000個のString型の要素を持つArrayとObjectをそれぞれ、1000回ランダムにアクセスし、アクセスする時間を比較。
要素がObject型のときと比べ、ループではなくindexOfでアクセスする分速いが、結果はObjectのほうが断然速い。
♥0 | Line 50 | Modified 2010-10-17 00:16:13 | MIT License
play

ActionScript3 source code

/**
 * Copyright inosyan ( http://wonderfl.net/user/inosyan )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/vxgT
 */

package {
    import flash.text.TextField;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        
        private var _output:TextField;
        public function FlashTest() {
            _output = new TextField;
            _output.width = 400;
            _output.height = 300;
            addChild(_output);
            
            experiment_List_Table();
        }
        
        private function experiment_List_Table():void
        {
            const MAX:int = 1000;
            const TESTCNT:int = 1000;
            var list:Array = [];
            var table:Object = {};
            for( var i:int = 0; i < MAX; ++i ){
                var data:String = "name"+i;
                list.push(data);
                table[data] = i;
            }
            var rectime:Number, trg:String, ans:int;
            
            var s:String = "ArrayとObjectとのアクセス時間比較\n";
            for( var a:int = 0; a < 5; ++a ){
                s += "///// "+(a+1) + "回目 /////\n";
                s += _sub();
            }
            _output.text = s;
            
            function _sub():String
            {
                var ret:String = "";
                // Array
                rectime = (new Date).time;
                for( i = 0; i < TESTCNT; ++i ){
                    trg = "name"+int(Math.random()*MAX);
                    ans = list.indexOf(trg);
                }
                ret += "Array " + ((new Date).time - rectime) + "ms\n"; 
                
                // Object
                rectime = (new Date).time;
                for( i = 0; i < TESTCNT; ++i ){
                    trg = "name"+int(Math.random()*MAX);
                    ans = table[trg];
                }
                ret += "Object " + ((new Date).time - rectime) + "ms\n"; 
                return ret;
            }
            
        }
    }
}