Classe Vector e classe Array a confronto

Utilizzate la classe Vector invece della classe Array quando è possibile.

La classe Vector consente un accesso in lettura e scrittura più rapido rispetto alla classe Array.

Una prova molto semplice permette di evidenziare i vantaggi della classe Vector sulla classe Array. Il codice seguente mostra un benchmark per la classe Array:

var coordinates:Array = new Array(); 
var started:Number = getTimer(); 
  
for (var i:int = 0; i< 300000; i++) 
{ 
    coordinates[i] = Math.random()*1024; 
} 
  
trace(getTimer() - started); 
// output: 107 

Il codice seguente mostra un benchmark per la classe Vector:

var coordinates:Vector.<Number> = new Vector.<Number>(); 
var started:Number = getTimer(); 
  
for (var i:int = 0; i< 300000; i++) 
{ 
    coordinates[i] = Math.random()*1024; 
} 
 
trace(getTimer() - started); 
// output: 72 

Questo esempio può essere ulteriormente ottimizzato assegnando una lunghezza specifica al vettore e inizializzando la lunghezza:

// Specify a fixed length and initialize its length 
var coordinates:Vector.<Number> = new Vector.<Number>(300000, true); 
  
var started:Number = getTimer(); 
  
for (var i:int = 0; i< 300000; i++) 
{ 
    coordinates[i] = Math.random()*1024; 
} 
 
trace(getTimer() - started); 
// output: 48 

Se le dimensioni del vettore non vengono specificate in anticipo, esse aumentano quando lo spazio del vettore si esaurisce. Ogni volta che le dimensioni del vettore aumentano, viene allocato un nuovo blocco di memoria. Il contenuto corrente del vettore viene copiato nel nuovo blocco di memoria di memoria. Questo allocazione e copiatura di dati supplementare appesantisce le prestazioni. Il codice dell'esempio precedente viene ottimizzato per le prestazioni specificando la dimensione iniziale del vettore. Tuttavia, il codice non è ottimizzato per la gestibilità. Per migliorarne la gestibilità, memorizzate in una costante il valore riutilizzato:

// Store the reused value to maintain code easily 
const MAX_NUM:int = 300000; 
  
var coordinates:Vector.<Number> = new Vector.<Number>(MAX_NUM, true); 
var started:Number = getTimer(); 
  
for (var i:int = 0; i< MAX_NUM; i++) 
{ 
    coordinates[i] = Math.random()*1024; 
} 
  
trace(getTimer() - started); 
// output: 47 

Cercate di utilizzare le API che utilizzano gli oggetti Vector, quando è possibile, poiché è probabile che assicurino un'esecuzione più rapida.