Array:そのまま/メモリ指定/適当に代入, Vector:そのまま/サイズ固定

by dacyou
http://wonderfl.net/code/2b40adee55401dba5f8fdebeac528f52f2b5d652
forkしようと思ったら、なぜかコンパイルが始まらなかったので新規に。
ArrayとVectorの速度比較。
クリックすると始まります。
微妙に順番を入れ替えたりします。
1 Array
2 Array+メモリ指定
3 Array+適当に代入
4 Vector
5 Vector+固定
♥0 | Line 77 | Modified 2010-04-09 02:11:10 | MIT License
play

ActionScript3 source code

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

// forked from Fumio's Vector class versus Array class
// http://wonderfl.net/code/2b40adee55401dba5f8fdebeac528f52f2b5d652
// forkしようと思ったら、なぜかコンパイルが始まらなかったので新規に。


/*
	ArrayとVectorの速度比較。
	クリックすると始まります。
	微妙に順番を入れ替えたりします。
	1 Array
	2 Array+メモリ指定
	3 Array+適当に代入
	4 Vector
	5 Vector+固定
*/

package {
import flash.display.Sprite
import flash.utils.getTimer
import flash.events.MouseEvent
import flash.text.TextField

public class Main extends Sprite {
	private const MAX_NUMBER:int = 5000000;
	private var my_array:Array = new Array()
	private var my_array2 :Array = new Array(MAX_NUMBER)
	private var my_array3 :Array = new Array(MAX_NUMBER)
	private var myVector:Vector.<int> = new Vector.<int>();
	private var myVectorFixed:Vector.<int> = new Vector.<int>(MAX_NUMBER, true);   // 長さを固定
	private var i:int;
	private var started:int;
	private var _field :TextField

	function Main() {
		addChild( _field = new TextField )
		_field.autoSize = "left"
		
		for ( i = 0; i < MAX_NUMBER; i++ )
			my_array3[i] = "ABC"
		
		stage.addEventListener( MouseEvent.CLICK, _onClick )
		_field.appendText( "*** Click me!!***\n" )
	}
	
	private var list :Array = [testArray, testArray2, testArray3, testVector, testVectorFixed]
	private function _onClick( e :MouseEvent ) :void {
		stage.removeEventListener( MouseEvent.CLICK, _onClick )
		
		var a :int = int(Math.random() * list.length)
		var b :int = list.length - (a+1)
		var c :Function = list[a]
		list[a] = list[b]
		list[b] = c
		
		_field.appendText( ">>>>> start\n" )
		for each( var func :Function in list )
			func()
		_field.appendText("<<<<< end\n")
		_field.appendText( "\n*** Click me!!***\n" )
		
		for ( i = 0; i < MAX_NUMBER; i++ )
			my_array3[i] = "ABC"
		
		stage.addEventListener( MouseEvent.CLICK, _onClick )
	}
	
	
	private function testArray():void {
		started = getTimer();
		for (i = 0; i < MAX_NUMBER; i++) {
			my_array[i] = i;
		}
		_field.appendText( "Array : " + (getTimer() - started) + "\n");
	}
	private function testArray2():void {
		started = getTimer();
		for (i = 0; i < MAX_NUMBER; i++) {
			my_array2[i] = i;
		}
		_field.appendText( "Array メモリ指定 : " + (getTimer() - started) + "\n");
	}
	private function testArray3():void {
	  started = getTimer();
	  for (i = 0; i < MAX_NUMBER; i++) {
		my_array3[i] = i;
	  }
	  _field.appendText( "Array 適当に代入 : " + (getTimer() - started) + "\n");
	}
	private function testVector():void {
	  started = getTimer();
	  for (i = 0; i < MAX_NUMBER; i++) {
		myVector[i] = i;
	  }
	  _field.appendText( "Vector : " + (getTimer() - started) + "\n");
	}
	private function testVectorFixed():void {
	  started = getTimer();
	  for (i = 0; i < MAX_NUMBER; i++) {
		myVectorFixed[i] = i;
	  }
	  _field.appendText( "VectorFixed : " + (getTimer() - started) + "\n");
	}
}

}//end package