Exemples de fonctionnement de base
Vectorapp.java
Importer java.util.vector; importer java.lang. *; Importer Java.util.Enumeration; classe publique VectorApp {public static void main (String args []) {vector v1 = new vector (); Entier entier1 = nouveau entier (1); // Ajouter un objet String v1.Addelement ("un"); // Ajouter en tant qu'objet entier v1.addelement (Integer1); v1.addelement (Integer1); v1.addelement ("deux"); v1.addelement (nouvel entier (2)); v1.addelement (Integer1); v1.addelement (Integer1); // Convertir en un système de chaîne et d'impression.out.println ("Le vecteur v1 est: / n / t" + v1); // insérer un nouvel objet à la position spécifiée v1.insertElement ("trois", 2); v1.insertelement (nouveau flotteur (3.9), 3); System.out.println ("Le vecteur v1 (méthode utilisée insertElementat () est: / n / t)" + v1); // Définissez l'objet à la position spécifiée comme un nouvel objet // Les objets après la position spécifiée sont étendus dans la séquence V1.SetElementat ("quatre", 2); System.out.println ("La méthode V1 V1 Cused setElmentat () est: / n / t" + v1); v1.reMoveElement (Integer1); // Supprimez l'objet Integer1 de l'objet vectoriel v1 // Puisqu'il y a plusieurs Integer1, commencez de zéro. // trouver pour supprimer le premier Integer1 trouvé. Énumération enum = v1.Elements (); System.out.println ("Le vecteur v1 (méthode utilisée retireelemt () est"); while (enum.hasmoreelements ()) System.out.println (enum.nextelement () + ""); System.out.println (); // Utilisez la méthode de la classe d'énumération. Object1 (top-to-botton): "+ v1.indexof (Integer1)); System.out.println (" La position d'objectif1 (tottom-to-top): "+ v1.LastIndexof (Integer1)); // Recherchez la position où l'objet Integer1 est dans différents directions v1.setsize (4); vecteur) est: "+ v1); // réinitialiser la taille de V1, et les éléments excédentaires sont jetés}} Résultats en cours:
E: / Java01> Java VectorApp Le vecteur v1 est: [un, 1,1, deux, 2,1,1] Le vecteur v1 (méthode utilisée insertElementat ()) est: [un, 1, trois, 3,9,1 V1 (méthode utilisée RematelElement ()) est: un quatre 3,9 1 deux 2 1 1 La position de l'objet1 (top-to-botton): 3 La position de Object1 (botton-to-top): 7 Le nouveau vecteur (redimensionné le vecteur) est: [un, quatre, 3.9,1]
Expansion 1x du sommet
N'oubliez pas si ArrayList est étendu à 0,5 fois le méta-crayon à chaque fois? Le vecteur est légèrement différent de ArrayList lors de l'exécution des opérations d'expansion de la capacité
protégé Int CapacitéIncrement; // Utiliser pour spécifier la capacité de chaque expansion private void Grow (int mincapacity) {// Code de trop-flux Int OldCapacity = elementData.Length; int newcapacity = oldcapacity + ((capacineIncrement> 0)? CapacitéIncrement: oldcapacity); // si la capacitéIncrement n'est pas spécifiée, la capacité d'expansion par défaut est la capacité du tableau d'origine if (newCapacity - mincapacity <0) newCapacity = mincapacité; if (newCapacity - max_array_size> 0) newCapacity = HugeCapacity (mincapacity); elementData = arrays.copyof (elementData, newcapacity);}Des amis prudents peuvent constater qu'il existe une variable de capacité supplémentaire dans le vecteur, qui est utilisée pour spécifier l'incrément de chaque expansion. Si cette variable n'est pas spécifiée, vous pouvez trouver dans la croissance que le vecteur étend la capacité par défaut à 1 fois le tableau d'origine.
Sécurité en fil
Vertor est en toute sécurité au fil!
Une autre chose plus visible dans le code source du vertor est que la plupart des méthodes ont un mot-clé synchronisé. Tout le monde sait que ce mot-clé est utilisé pour la synchronisation des threads, donc la classe vectorielle est en filetage!
Mais même si toutes ses méthodes sont modifiées pour être synchrones, cela ne signifie pas qu'il n'y a pas besoin de synchronisation lors de l'appel:
Vector statique privé <Integer> vector = new vector <nteger> (); public static void main (String [] args) {while (true) {for (int i = 0; i <10; i ++) {vector.add (i); } Thread removethread = new Thread (new Runnable () {@Override public void run () {for (int i = 0; i <vector.size (); i ++) {vector.remove (i);}}}); Thread printthread = new Thread (new Runnable () {@Override public void run () {for (int i = 0; i <vector.size (); i ++) {System.out.println (vector.get (i));}}}); supprimer.start (); printthread.start (); while (thread.activeCount ()> 20); }}Après avoir exécuté ce code pendant une courte période, vous trouverez une exception ArrayIndexoutOfBoundSexception. Bien que la méthode GET, Supprimer et Taille de vecteur ici ait une modification synchronisée, dans un environnement multithread, si aucune mesure de synchronisation supplémentaire n'est prise du côté de la méthode, ce code est toujours dangereux. Si un thread supprime l'élément avec le numéro de série I et qu'un autre thread y accède, il lancera directement l'exception. Par conséquent, pour garantir la sécurité de ce code, il nécessite également que la modification synchronisée soit ajoutée pour s'exécuter.