Exemplos básicos de operação
Vectorapp.java
importar java.util.Vector; importar java.lang.*; importar java.util.enumeration; classe pública VectorApp {public static void main (string args []) {vector v1 = new Vector (); Inteiro inteiro1 = novo número inteiro (1); // Adicione como objeto string v1.addElement ("One"); // Adicione como objeto inteiro V1.AddElement (Integer1); v1.AddElement (Integer1); v1.AddElement ("dois"); v1.AddElement (novo número inteiro (2)); v1.AddElement (Integer1); v1.AddElement (Integer1); // converte em uma string e system Print.out.println ("O vetor v1 é:/n/t"+v1); // Insira um novo objeto na posição especificada v1.InsertElement ("três", 2); v1.InsertElement (novo float (3.9), 3); System.out.println ("O Vector V1 (Método usado insertElementat () é:/n/t)"+v1); // Defina o objeto na posição especificada como um novo objeto // Os objetos após a posição especificada for estendida na sequência v1.setElementat ("quatro", 2); System.out.println ("O método de cutucado Vector V1 setelmentat () é:/n/t"+v1); v1.RemoveElement (Integer1); // Exclua o objeto integer1 do objeto vetor V1 // Como existem múltiplos integer1, comece do zero. // Encontre para excluir o primeiro número inteiro1 encontrado. Enumeração enum = v1.elements (); System.out.println ("O vetor V1 (método usado removeleMemt () é"); while (enum.hasmoreElements ())) system.out.println (enum.nextElement ()+""); system.out.println (); // usa o método da classe de enumeração (enumemation) para obter o objeto de cada. Object1 (de cima para baixo): "+v1.IndexOf (integer1)); System.out.println (" A posição do objeto1 (totom-to-top): "+V1.LastIndexOf (integer1); // pesquisar a posição em que o objeto inteiro está em direções diferentes (systemsize; vetor) é: "+v1); // redefinir o tamanho de V1, e o excesso de elementos são descartados}} Resultados em execução:
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 ()) é: um quatro 3.9 1 dois 2 1 1 A posição do objeto1 (de cima para baixo): 3 A posição do objeto1 (Botton-to-top): 7 O novo vetor (redimensionado o vetor) é: [um, quatro, 3,9,1]
Expansão 1x de Vertor
Lembre -se se o ArrayList for expandido para 0,5 vezes a metaarray a cada vez? O vetor é um pouco diferente do ArrayList ao executar operações de expansão de capacidade
Capacidade int protegida InCrement; // Use para especificar a capacidade de cada expansão Void Private Grow (int MinCapacity) {// Código consciente do Overflow int OldCapacity = ElementData.Length; int newCapacity = antigoCapacity + ((CapacateIncrement> 0)? Capacidade InCrement: OldCapacity); // Se a capacidade de capacidade não for especificada, a capacidade de expansão da capacidade padrão é a capacidade da matriz original se (NewCapacity - MinCapacity <0) newCapacity = miCapacity; if (newCapacity - max_array_size> 0) newCapacity = hugecapacity (mincapacidade); ElementData = Arrays.copyof (ElementData, NewCapacity);}Amigos cuidadosos podem descobrir que existe uma variável de increment de capacidade adicional no vetor, que é usada para especificar o incremento de cada expansão. Se essa variável não for especificada, você poderá encontrar no crescimento que o vetor expande a capacidade por padrão para 1 vezes a matriz original.
Segurança do thread
Vertor está seguro para threads!
Outra coisa mais conspícua no código -fonte de Vertor é que a maioria dos métodos tem uma palavra -chave sincronizada. Todo mundo sabe que essa palavra-chave é usada para sincronização de threads, então a classe vetorial é segura para threads!
Mas mesmo que todos os seus métodos sejam modificados para serem síncronos, isso não significa que não há necessidade de sincronização ao chamá -lo:
Vector estático privado <TEGER> vetor = novo vetor <TEGER> (); public static void main (string [] args) {while) {for (int i = 0; i <10; i ++) {vetor.add (i); } Thread removeThread = new Thread (new runnable () {@Override public void run () {for (int i = 0; i <vetor.size (); i ++) {vector.remove (i);}}}); Thread printthread = new Thread (new runnable () {@Override public void run () {for (int i = 0; i <vetor.size (); i ++) {System.out.println (vetor.get.get (i));}}}); removethread.start (); printthread.start (); while (thread.activeCount ()> 20); }}Depois de executar este código por um curto período de tempo, você encontrará uma exceção ArrayIndexoutOfBoundSexception. Embora o método Get, Remover e Size de Vector aqui tenha modificação sincronizada, em um ambiente multithread, se nenhuma medidas adicionais de sincronização for tomada no lado do método, esse código ainda não é seguro. Se um thread excluir o elemento com o número de série I e outro thread acessa este i, ele lançará diretamente a exceção. Portanto, para garantir a segurança desse código, ele também requer que a modificação sincronizada seja adicionada para ser executada.