Primeiro de tudo, analisamos as duas categorias que implementam interfaces de lista, e existem três classes de implementação na interface da lista, nomeadamente Arraylist, Vector e LinkedList. A lista é usada para armazenar vários elementos, pode manter a ordem dos elementos e permite a repetição de elementos.
As diferenças relevantes entre as três classes de implementação específicas são as seguintes:
1. Arraylist é a classe de implementação da lista mais usada, implementada internamente através de matrizes, o que permite acesso aleatório rápido aos elementos. A desvantagem das matrizes é que não pode ser espaçado entre cada elemento. Quando o tamanho da matriz não é satisfeito, a capacidade de armazenamento precisa ser aumentada. É necessário dizer que os dados da matriz já são copiados para o novo espaço de armazenamento. Ao inserir ou excluir elementos da posição intermediária do Arraylist, a matriz precisa ser copiada, movida e o custo é relativamente alto. Portanto, é adequado para pesquisas e travessias aleatórias, não para inserção e exclusão.
2. O vetor também é implementado por meio de matrizes, a diferença é que ele suporta a sincronização do encadeamento, ou seja, em um determinado momento, apenas um thread pode escrever um vetor para evitar inconsistência causada por vários threads que escrevem ao mesmo tempo, mas custa muito para implementar a sincronização, portanto, o acesso é mais lento do que o acesso à ArrayList.
3. O LinkedList usa uma estrutura de lista vinculada para armazenar dados, que é muito adequada para inserção e exclusão dinâmica de dados, e o acesso aleatório e as velocidades de traversal são relativamente lentas. Além disso, ele também fornece métodos que não são definidos na interface da lista, que são usados especificamente para operar elementos de cabeçalho e cauda da tabela e podem ser usados como pilhas, filas e filas bidirecionais.
Olhando para o código-fonte do Java, descobri que quando o tamanho da matriz não for suficiente, preciso recriar a matriz e copiar os elementos para a nova matriz. O tamanho da matriz estendida de Arraylist e Vector é diferente.
Arraylist:
public boolean add (e e) {surCapacity (tamanho + 1); // Adicione elementos para determinar se eles podem acomodá -los. Se não puder, você precisa criar um novo elemento da matriz [size ++] = e; Retornar true;} vazio público EnsureCapacity (int mincapacity) {modCount ++; int OldCapacity = ElementData.Length; if (mincapacity> OldCapacity) {objeto OldData [] = elementData; // Esta linha não mostrou a utilidade, não sei o que os desenvolvedores estão pensando sobre int newCapacity = (OldCapacity * 3)/2 + 1; // Adicione o tamanho da nova matriz if (newcapacity <mincapacity) newCapacity = MinCapacity; // MinCapacity geralmente é próximo do tamanho, então isso é uma vitória: elementData = Arrays.copyof (ElementData, NewCapacity); }}No vetor:
Void privado EnsureCapacityHelper (int mincapacity) {int OldCapacity = ElementData.Length; if (mincapacity> OldCapacity) {object [] OldData = elementData; int newCapacity = (CapacateIncrement> 0)? (OldCapacity + CapacateIncrement): (OldCapacity * 2); if (newCapacity <mincapacity) {newCapacity = mincapacity; } elementData = Arrays.copyof (ElementData, NewCapacity); }}A diferença entre Arraylist e Vector é a seguinte:
O ArrayList é expandido em 50% + 1 por padrão quando não há memória insuficiente e o vetor é expandido 1 vezes por padrão.
O Vector fornece a interface indexOF (OBJ, Start), mas o ArrayList não.
Os vetores estão no nível de segurança do encadeamento, mas, na maioria dos casos, os vetores não são usados porque a segurança do encadeamento requer maior sobrecarga do sistema.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.