Comparaison des classes Vector et Array

Dans la mesure du possible, faites appel à la classe Vector plutôt qu’à la classe Array.

La classe Vector autorise des accès en lecture et écriture plus rapides que la classe Array.

Un simple test de performances démontre les avantages que présente la classe Vector par rapport à la classe Array. Le code suivant illustre un test de performances concernant 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 

Le code suivant illustre un test de performances concernant 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 

Il est possible d’optimiser encore plus l’exemple en attribuant une longueur précise fixe au vecteur :

// 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 

Si la taille du vecteur n’est pas définie à l’avance, elle augmente lorsque le vecteur n’a plus de place. A chaque augmentation de la taille du vecteur, un nouveau bloc de mémoire est affecté. Le contenu actif du vecteur est copié dans le nouveau bloc de mémoire. Cette affectation de mémoire supplémentaire et la copie des données ont une incidence sur les performances. Dans le code ci-dessus, la taille initiale du vecteur est définie en vue d’optimiser les performances. Ce code n’est cependant pas optimisé à des fins de maintenabilité. Pour améliorer sa maintenabilité, placez la valeur réutilisée dans une constante :

// 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 

Dans la mesure du possible, utilisez les API de l’objet Vector, car leur exécution sera probablement plus rapide.