Basisbetriebsbeispiele
Vectorapp.java
Import Java.util.Vector; Java.lang importieren.*; Import Java.util.Enumeration; public class vectorapp {public static void main (String args []) {vector v1 = new vector (); Integer Integer1 = New Integer (1); // als String -Objekt v1.addelement ("eins") hinzufügen; // als Integer -Objekt v1.addelement (Integer1) hinzufügen; v1.Addelement (Integer1); v1.addelement ("zwei"); v1.Addelement (neue Ganzzahl (2)); v1.Addelement (Integer1); v1.Addelement (Integer1); // in eine Zeichenfolge und Drucksystem konvertieren. // Ein neues Objekt in die angegebene Position v1.insertElement ("drei", 2) einfügen; v1.insertElement (neuer Float (3,9), 3); System.out.println ("Der Vektor v1 (verwendete Methode InsertElementat () ist:/n/t)"+v1); // Setzen Sie das Objekt an der angegebenen Position als neues Objekt // Die Objekte nach der angegebenen Position sind in Sequenz v1.setElementat ("Four", 2) erweitert. System.out.println ("Die Vektor V1 CUSED -Methode setElmentat () ist:/n/t"+v1); v1.removeElement (Integer1); // Löschen Sie das Object Integer1 aus dem Vektorobjekt v1 // Da es mehrere Integer1 gibt, beginnen Sie von vorne. // Finden Sie zum Löschen des ersten Integer1 gefunden. Enumeration enum = v1.elements (); System.out.println ("Die Vektor v1 (verwendete Methode removeLeMeMt () ist"); while (enum.hasmoreElements ()) system.out.println (enum.nextElement ()+""); Object1 (Top-to-Botton): "+v1.Indexof (Integer1)); System.out.println (" Die Position von Object1 (Tottom-to-Top): "+v1.lastindexof (Integer1); // Die Position durchsucht, wobei das Objekt integer1 in unterschiedliche Direktionen V1.Setrizize (4); Vektor) ist: "+v1); // Die Größe von V1 zurücksetzen, und die überschüssigen Elemente werden verworfen}} Auslaufergebnisse:
E:/java01> Java VectorApp Der Vektor V1 ist: [Eins, 1,1, zwei, 2,1,1] Der Vektor V1 (verwendete Methode InsertElementat ()): [Eins, 1, drei, 3,9,1, zwei, 2,1,1] Die Vektor V1 (verwendete Methode -Setelementat (). V1 (Verwendungsmethode REMEDELEMENT ()) IS: One Four 3,9 1 Two 2 1 1 Die Position von Objekt 1 (Top-to-Botton): 3 Die Position von Objekt1 (Botton-to-Top): 7 Der neue Vektor (angewertet der Vektor) lautet: [Eins, vier, 3,9,1]
Vertors 1x -Erweiterung
Erinnern Sie sich, ob ArrayList jedes Mal das 0,5 -fache des Metaarray erweitert wird? Der Vektor unterscheidet sich bei der Durchführung von Kapazitätserweiterungsvorgängen geringfügig von ArrayList
Protected Int CapacityIncrement; // Verwenden Sie, um die Kapazität für jede Expansion privates Hohlraum anzugeben (int mincapacity) {// überlaufbewusster Code int oldCapacity = elementData.length; int newcapacity = OldCapacity + ((CAPAPYINCREMENT> 0)? CAPAPY INCREMENT: OldCapacity); // Wenn keine Kapazitätsinkrements angegeben ist, ist die Standardkapazitätserweiterungskapazität die Kapazität des ursprünglichen Arrays, wenn (Newcapacity - Mincapacity <0) Newcapacity = Mincapacity; if (newcapacity - max_array_size> 0) newCapacity = Hugcapacity (mincapacity); elementData = arrays.copyof (ElementData, Newcapacity);}Sorgfältige Freunde können feststellen, dass eine zusätzliche Kapazitäts -Variable im Vektor vorhanden ist, mit der die Erhöhung jeder Ausdehnung angegeben wird. Wenn diese Variable nicht angegeben ist, können Sie im Wachstum feststellen, dass der Vektor die Kapazität standardmäßig auf das 1 -fache des ursprünglichen Arrays erweitert.
Fadensicherheit
Vertor ist Faden sicher!
Ein weiteres auffälligere Ding im Vertor -Quellcode ist, dass die meisten Methoden ein synchronisiertes Schlüsselwort haben. Jeder weiß, dass dieses Schlüsselwort für die Threadsynchronisation verwendet wird, daher ist die Vektorklasse Thread-Safe!
Aber selbst wenn alle seine Methoden so modifiziert sind, dass sie synchron sind, bedeutet dies nicht, dass beim Aufrufen nicht die Synchronisation erforderlich ist:
private static vector <GanzEger> vector = neuer Vektor <Integer> (); public static void main (String [] args) {while (true) {for (int i = 0; i <10; i ++) {vector.add (i); } Thread removeShead = neuer Thread (new Runnable () {@Override public void run () {für (int i = 0; i <vector.size (); i ++) {vector.remove (i);}}}); Thread printhead = neuer Thread (new Runnable () {@Override public void run () {for (int i = 0; i <vector.size (); i ++) {System.out.println (vector.get (i));}}}); removethread.start (); printhead.start (); while (thread.activeCount ()> 20); }}Nachdem Sie diesen Code für einen kurzen Zeitraum ausgeführt haben, finden Sie eine Ausnahme von ArrayIndexoutOfBoundSexception. Obwohl die Vektormethode GET, Entfernen und Größen hier eine synchronisierte Modifikation in einer Umgebung mit mehreren Threads aufweist, ist dieser Code immer noch unsicher, wenn keine zusätzlichen Synchronisationsmaßnahmen auf der Methode durchgeführt werden. Wenn ein Thread das Element mit Seriennummer I löscht und ein anderer Thread auf diese I zugreift, wird die Ausnahme direkt ausgelöst. Um die Sicherheit dieses Codes zu gewährleisten, muss auch die synchronisierte Änderung hinzugefügt werden, um ausgeführt zu werden.