Ejemplos de operación básicos
Vectorapp.java
import java.util.vector; import java.lang.*; importar java.util.enerumeration; public class vectorApp {public static void main (string args []) {vector v1 = new vector (); Entero entero1 = nuevo entero (1); // agregar como objeto de cadena v1.addelement ("one"); // agregar como objeto entero v1.addelement (integer1); v1.addelement (entero1); v1.addelement ("dos"); v1.addelement (nuevo entero (2)); v1.addelement (entero1); v1.addelement (entero1); // Convertir a una cadena e imprimir sistema.out.println ("El vector v1 es:/n/t"+v1); // inserte un nuevo objeto a la posición especificada v1.insertelement ("tres", 2); v1.sertelement (nuevo flotador (3.9), 3); System.out.println ("El vector v1 (método usado insertoLementat () es:/n/t)"+v1); // Establezca el objeto en la posición especificada como un nuevo objeto // Los objetos después de la posición especificada se extienden en la secuencia v1.setElementAt ("cuatro", 2); System.out.println ("El método vector v1 setelmentat () es:/n/t"+v1); v1.removeElement (entero1); // Eliminar el objeto Integer1 del objeto vector V1 // Dado que hay múltiples enteros1, comience desde cero. // Encuentra para eliminar el primer entero1 encontrado. Enumeración enum = v1.elements (); System.out.println ("El vector v1 (método usado removeLememt () es"); while (enum.hasmoreelements ()) system.out.println (enum.nextelement ()+""); system.out.println (); // use el método de la clase de enumeración (enumeración) para obtener cada elemento del vector del vector. Object1(top-to-botton):"+v1.indexOf(integer1)); System.out.println("The position of Object1(tottom-to-top):"+v1.lastIndexOf(integer1)); //Search the position where the object integer1 is in different directions v1.setSize(4); System.out.println("The new Vector(resized the vector) es: "+v1); // restablecer el tamaño de v1, y los elementos excesivos se descartan}} Resultados de ejecución:
E:/java01>java VectorApp The vector v1 is:[one,1,1,two,2,1,1] The vector v1(used method insertElementAt()) is: [one,1,three,3.9,1,two,2,1,1] The vector v1(used method setElementAt()) is: [one,1,four,3.9,1,two,2,1,1] The vector V1 (método usado removeLement ()) es: uno cuatro 3.9 1 dos 2 1 1 La posición de Object1 (arriba a botón): 3 La posición de Object1 (botton-to-top): 7 El nuevo vector (redimensione el vector) es: [uno, cuatro, 3.9,1]
Expansión 1x de Vertor
¿Recuerdas si ArrayList se expande a 0.5 veces el metaarray cada vez? El vector es ligeramente diferente de ArrayList al realizar operaciones de expansión de capacidad
Inter Capacidad protegida; // Use para especificar la capacidad de cada expansión Void Void Grow (int int newCapacity = OldCapacity + ((CapacityIncrement> 0)? CapacityIncrement: OldCapacity); // Si no se especifica CapacityIncrement, la capacidad de expansión de capacidad predeterminada es la capacidad de la matriz original si (newcapacity - mincapacity <0) newCapacity = minCapacity; if (newCapacity - max_array_size> 0) newCapacity = HugeCapacity (mincapacity); elementData = arrays.copyOf (elementData, newCapacity);}
Los amigos cuidadosos pueden encontrar que hay una variable adicional en la capacidad de entrada en el vector, que se utiliza para especificar el incremento de cada expansión. Si no se especifica esta variable, puede encontrar en el crecimiento que el vector expande la capacidad de forma predeterminada a 1 veces la matriz original.
Seguridad
¡VERTOR es seguro de hilo!
Otra cosa más conspicua en el código fuente de Vertor es que la mayoría de los métodos tienen una palabra clave sincronizada. Todos saben que esta palabra clave se usa para la sincronización de subprocesos, por lo que la clase Vector es segura de hilo.
Pero incluso si todos sus métodos se modifican para ser sincrónicos, no significa que no haya necesidad de sincronización al llamarlo:
Private static vector <Integer> vector = new Vector <Integer> (); public static void main (string [] args) {while (true) {for (int i = 0; i <10; i ++) {vector.add (i); } Thread eliminarThread = 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));}}}); RemoVethread.Start (); printThread.start (); while (thread.activeCount ()> 20); }}Después de ejecutar este código por un corto período de tiempo, encontrará una excepción de ArrayInDexOutofBoundSException. Aunque el método Get, Eliminar y el tamaño de Vector aquí tiene una modificación sincronizada, en un entorno múltiple, si no se toman medidas de sincronización adicionales en el lado del método, este código aún no es seguro. Si un hilo elimina el elemento con el número de serie I, y otro hilo accede a esto I, lanzará directamente la excepción. Por lo tanto, para garantizar la seguridad de este código, también requiere que se agregue la modificación sincronizada para que se ejecute.