Array vs. Vector vs. Linked list

by yonatan
♥2 | Line 77 | Modified 2009-10-24 17:05:17 | MIT License
play

ActionScript3 source code

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

package {
    import flash.display.Sprite;
    import flash.text.*;
    import flash.utils.getTimer;
    public class FlashTest extends Sprite {
        public function FlashTest() {
            var tf:TextField = new TextField;
            tf.width = stage.stageWidth;
            tf.height = stage.stageHeight;
            tf.text = "Array vs. Vector vs. Linked list test";
            addChild( tf );
            tf.appendText( "\n" + ITERATIONS + " iterations - times in ms:" );
            tf.appendText( "\nNo collection: " + testNothing() );
            tf.appendText( "\nArray: " + testArray() );
            tf.appendText( "\nVector: " + testVector() );
            tf.appendText( "\nLinked list: " + testList() );
        }
        
        private static const ITERATIONS:int = 200000;
        
        public function testNothing():Number {
            var s:Number = getTimer();
            var n:int = 0;
            
            for( var i:int=0; i < ITERATIONS; i++ ) {
                for( var j:int=0; j < 1000; j++ ) {
                    n++;
                }
            }
            
            return getTimer() - s;
        }

        public function testArray():Number {
            var a:Array = new Array;
            
            // init
            for( var ii:int=0; ii < 1000; ii++ ) {
                a[ii] = 0;
            }
            
            // test
            var s:Number = getTimer();
            for( var i:int=0; i < ITERATIONS; i++ ) {
                for( var j:int=0; j < 1000; j++ ) {
                    a[j]++;
                }
            }
            
            return getTimer() - s;
        }
        
        public function testVector():Number {
            var v:Vector.<int> = new Vector.<int>;
            
            // init
            for( var ii:int=0; ii < 1000; ii++ ) {
                v[ii] = 0;
            }
            
            // test
            var s:Number = getTimer();
            for( var i:int=0; i < ITERATIONS; i++ ) {
                for( var j:int=0; j < 1000; j++ ) {
                    v[j]++;
                }
            }
            
            return getTimer() - s;
        }

        public function testList():Number {
            var head:Node = new Node;
            var current:Node;
            
            // init
            current = head;
            for( var ii:int=0; ii < 999; ii++ ) {
                current.next = new Node;
                current = current.next;
            }
            
            // test
            var s:Number = getTimer();
            for( var i:int=0; i < ITERATIONS; i++ ) {
                current = head;
                do {
                    current.value++;
                } while( current = current.next );
            }
            
            return getTimer() - s;
        }
    }
}

class Node {
    public var next:Node = null;
    public var value:int = 0;
}