《Vectorなら?》VectorもShift Unshift おもすぎ!!

by famibee2 forked from forked from: Shift Unshift おもすぎ!! (diff: 4)
bkzenさんのつぶやきを受けてテスト
shiftも"reverse"してpop()した方が速いっぽい?
♥0 | Line 100 | Modified 2010-01-25 10:33:13 | MIT License
play

ActionScript3 source code

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

// forked from keno42's Shift Unshift おもすぎ!!
// bkzenさんのつぶやきを受けてテスト
// forked from beinteractive's forked from: 関数のオーバーヘッドありすぎない?
// forked from keno42's 関数のオーバーヘッドありすぎない?
//
// shiftも"reverse"してpop()した方が速いっぽい?
//
package {
    import flash.display.Sprite;
    import flash.text.*;
    import flash.utils.*;
    public class FlashTest extends Sprite {
        private static const COUNT:uint = 20000;
//      private var array:Array = [];
        private var array:Vector.<Number> = Vector.<Number> ([]);
        public function FlashTest() {
            var tf:TextField = new TextField();
            addChild(tf);
            tf.autoSize = "left";
            // 環境によって?一番上の文字が見切れるので、一度改行。
            tf.text = "\n";
            tf.appendText( testReverse() );
            tf.appendText( testPush() );
            tf.appendText( testReverse() );            
            tf.appendText( testPush() );            
            tf.appendText( testReverse() );
            tf.appendText( testPush() );
            tf.appendText( testReverse() );
            tf.appendText( testPop() );
            tf.appendText( testPop() );
            tf.appendText( testPop() );
            tf.appendText( testUnshift() );
            tf.appendText( testUnshift() );
            tf.appendText( testUnshift() );
            tf.appendText( testShift() );
            tf.appendText( testShift() );
            tf.appendText( testShift() );
            tf.appendText( testOriginalUnshift() );   
            tf.appendText( testOriginalShift() );
        }
        private function testPush():String
        {
            var time:uint = getTimer();
            var i:Number, j:Number;
            for( i=0; i < COUNT; i++ ){
                array.push(i);
            }
            return "push(配列長" + (array.length-COUNT) +"->"+ array.length+ "): " + String(getTimer()-time) + "\n";
        }
        private function testPop():String
        {
            var time:uint = getTimer();
            var i:Number, j:Number;
            for( i=0; i < COUNT; i++ ){
                array.pop();
            }
            return "pop(配列長" + (array.length+COUNT) +"->"+ array.length+ "): " + String(getTimer()-time) + "\n";
        }
        private function testReverse():String
        {
            var time:uint = getTimer();
            var i:Number, j:Number;
            for( i=0; i < (COUNT/100); i++ ){
                array.reverse();
            }
            return "reverse(配列長" + array.length+ " を"+(COUNT/100)+" 回): " + String(getTimer()-time) + "\n";
        }
        private function testShift():String
        {
            var time:uint = getTimer();
            var i:Number, j:Number;
            for( i=0; i < COUNT; i++ ){
                array.shift();
            }
            return "shift(配列長"+ (array.length+COUNT) +"->" + array.length+ "): " + String(getTimer()-time) + "\n";
        }
        private function testUnshift():String
        {
            var time:uint = getTimer();
            var i:Number, j:Number;
            for( i=0; i < COUNT; i++ ){
                array.unshift(1);
            }
            return "unshift(配列長"+ (array.length-COUNT) +"->" + array.length+ "): " + String(getTimer()-time) + "\n";
        }
        private function testOriginalUnshift():String
        {
            var time:uint = getTimer();
            var i:Number, j:Number;
            array.reverse();
            for( i=0; i < COUNT; i++ ){
                array.push(i);
            }
            array.reverse();
            return " 自作unshift(配列長"+ (array.length-COUNT) +"->" + array.length+ "): " + String(getTimer()-time) + "\n";
        }
        private function testOriginalShift():String
        {
            var time:uint = getTimer();
            var i:Number, j:Number;
            array.reverse();
            for( i = 0; i < COUNT; i++) {
                array.pop();
            }
            array.reverse();
            return "自作shift(配列長"+ (array.length+COUNT) +"->" + array.length+ "): " + String(getTimer()-time) + "\n";
        } 
    }
}