Collections Framework Overview Series

anuário

1 Visão geral

2 Sistema de herança

 

1 Visão geral

Em geral, container Java pode ser dividido em quatro partes:

  • coleção de lista
  • coleção Set
  • coleção fila
  • coleção mapa

Além dos acima de quatro tipos de conjunto, há uma ferramenta especial:

  • Ferramentas (Iterator iterator, enumeração classe de enumeração, Arrays e Coleções)

overview coleção FIG é dada abaixo para realizar a sensação intuitiva

 2 Sistema de herança

Antes de começar a falar sistema de coleta específico, eu gostaria de explicar a estrutura básica Coleção estrutura de classe. Porque tanto a coleção de lista, coleção Set ou Map para esta coleção são baseados.

  • Em primeiro lugar, o nível superior é a interface Collection.

Recolha pode ser visto que a interface define o conjunto básico de mais operações, tais como: conjunto de determinação do tamanho, é determinado se a recolha é esperado em vão. List, Set, Fila de herdar essa interface.

  • Então, AbstractCollection também herdou a interface Collection.

Como pode ser visto a partir deste nome da classe, que é uma classe abstrata. AbstractCollection da coleção interface de algumas formas comuns de se fazer a implementação. Por exemplo: determinar se o método está vazia, o método compreende determinar se um elemento ou semelhantes.

Herdando interface de AbstractCollection, você pode escrever menos um monte de código desnecessário, que é o resumo de código design mais comumente pensado. AbstractCollection é a categoria mais básica, todos os outros conjunto de coisas ter herdado esta classe abstrata.

2.1 coleção Lista

Lista armazenada conjunto é um conjunto ordenado de dados, a estrutura de dados é caracterizada por: leitura rápida, modificar mais lento, adaptado para ler cena muda muito menos gravação. coleção de lista estrutura de herança de classe é a seguinte:

Podemos ver que em adição à coleção e AbstractCollection, temos as interfaces Lista AbstractList e classes abstratas. interface List, que é a camada superior da coleção Lista de abstração, que herdou a interface de coleção, de fato, representa uma coleção. O AbstractList é uma coleção de abstract implementar List, implementos muitas operações comuns.

Lista de implementar toda a coleção pode ser dividido em blocos vermelhos, amarelos, verdes e três. A parte vermelha é uma lista de implementação coleção List, a parte verde é combinado lista Lista de alcançar, enquanto a parte amarela é a versão thread-safe da Lista para alcançar o set list.

2.1.1 implementação da lista

ArrayList classe List é comumente implementado, a matriz subjacente é implementado. Elemento que lê a complexidade de tempo é O (1), o elemento de gravação complexidade tempo de modificação é O (N). Vamos explicar em detalhes nas seções a seguir, não faça em profundidade aqui.

Implementação 2.1.2 Lista de Segurança

Vector classe List são muito usados ​​para conseguir, e estrutura de dados ArrayList é muito semelhante. Mas a maior diferença é que, com um ArrayList: Vector é thread-safe, mas ArrayList não é thread-safe.

classe Stack é baseado no Vector, mas também para alcançar uma fila de duas vias. Assim, além de seu exterior thread-safe, que é um avançado após a implementação da lista.

Finalmente, resumimos, List coleção da classe de implementação mais críticos estão algumas delas:

  • ArrayList: Lista coleção de clássico alcançar.
  • Vector: uma lista da coleção clássica, thread-safe, e o ArrayList correspondente.
  • Pilha: Pilha estrutura clássica de alcançar, estrutura de última-out de dados. Herdado Vector, thread-safe.
  • LinkedList: estrutura lista ligada clássico de alcançar.

2.1.3 implementação da lista

LinkedList é uma implementação de lista ligada clássico. LinkedList herda a classe abstrata AbstractSequentialList. classe abstrata AbstractSequentialList é abstrato lista literalmente contínua. O foco aqui é
palavra sequencial, mostrando a estrutura de dados é contínuo (lista). Comentários também pode ser visto a partir da fonte significava.

A classe de Implementação do esqueleto do Fornece a este de pelo A  Lista  interface para o Minimizar a O esforço necessário para implementar a esta interface apoiado por uma "Sequential Access" o armazenamento de dados (como uma ligada List).
(Parafraseando) se você quiser implementar um armazenamento contínuo (lista) Lista, em seguida, a classe abstrata permite reduzir um monte de bastante trabalho.

Na verdade, ele pode ser visto a partir do nome, AbstractSequentialList na verdade, é um resumo alcançar lista contínua (lista) de. classe abstrata AbstractSequentialList para fazer um monte de trabalho, de modo que a subsequente implementação lista mais fácil. AbstractSequentialList pode ver a partir dos comentários, se você deseja implementar uma lista ligada, você só precisa implementar o método método e tamanho ListIterator nele.

2.2 Set coleção

Ajuste elementos são armazenados na recolha não se sobrepõem, mas a sequência armazenada está desordenada. O que se segue é um diagrama de configuração definido herança classe:

Semelhante à coleção de lista, é uma interface Set estende a interface Collection. A AbstractSet implementos classe abstrata a interface Set, AbstractCollection herdado classe abstrata. Esta parte é completamente o mesmo e List.

Conjunto para realizar o conjunto pode ser dividido em dois blocos, um é ordenada para alcançar (a parte vermelha) Definir o conjunto, o outro é um hash atingir (amarelo parte) conjunto de recolha.

2.2.1 realização ordenada (TreeSet)

  • interface de SortedSet estende o conjunto de interface, TreeSet implementos SortedSet.

Sabemos Ajuste elementos da coleção é desordenado, ea interface é definida SortedSet interface de Set uma coleção ordenada. O TreeSet é a realização de um SortedSet.

2.2.2 Hash atingir (HashSet, LinkedHashSet)

HashSet é um clássico implementos de hash a interface do conjunto. Mas Set elementos da coleção é desordenado, a fim de manter a ordem de inserção de recolha criadas, as pessoas criaram uma LinkedHashSet. LinkedHashSet HashSet com base na lista é mantido a fim de inserção.

Aqui resumimos tudo se realizar Set coleção:

  • TreeSet: Set implementação coleção ordenada.
  • HashSet: Hash Set implementação coleção.
  • LinkedHashSet: Hash Conjunto de recolha de implementar, manter a ordem dos elementos de inserção.

2,3 recolha Fila

Fila é uma forma especial linear, caracterizado por uma estrutura de dados FIFO. arquitectura baseada em filas como mostrado abaixo:

Em primeiro lugar, a interface Queue estende a interface Collection. fila interface tem um conjunto básico de operações na base das operações básicas definidas desta estrutura de dados fila. Podemos ver a oferta, pesquisa e outros métodos são exclusivos para operações de fila.

Em seguida, AbstractQueue interface abstrata para alcançar Queue. Esta estrutura de dados para a fila, adicionar elementos de exclusão de ação não são os mesmos. Na classe abstrata AbstractQueue irá implementar a operação básica da fila novamente. Por exemplo, adicionar um AbstractQueue método sobre o método e adicionar em AbstractList tem diferentes implementações.

Mostrado acima, a estrutura da classe geral da fila pode ser dividido em duas partes amarelo, vermelho. Red é parte de uma realização ordenada interface de fila, não PriorityQueue a classe de implementação. parte amarela é conseguir a Deque (deque), há dois ArrayDeque LinkedList e classe de implementação.

2.3.1 realização ordenada

AbstractQueue PriorityQueue é uma implementação concreta da classe abstrata.

PriorityQueue fila de prioridade indica que re-classificados por tamanho elemento fila. Quando o método da piscina () espiada chamada () ou, quando a cabeça é removido a partir de uma fila, não é levado para dentro do primeiro elemento da fila, mas remover o elemento mais pequeno da fila.

2.3.2 conseguir em dois sentidos

  • Primeiro, vamos ver interface de Deque. Fila de dupla extremidade (fila de dupla extremidade) é um meio de filas bidireccionais, o elemento pode ser operado com a cabeça ou a cauda.
  • Finalmente, vemos uma realização concreta de LinkedList e ArrayDeque são a interface Deque.

LinkedList dissemos antes, não é uma cadeia, mas é uma fila de duas vias. Portanto LinkedList tem as características duais de Lista e Queue. ArrayDeque fila circular é uma de duas vias, o qual é implementado pela matriz subjacente. Mais, vamos explicar na seção fila.

Finalmente, resumimos vários classe de implementação comum sistema de Fila:

  • PriorityQueue: fila de prioridade
  • LinkedList: implementação da fila de duas vias
  • ArrayDeque: bidireccional implementação da fila circular

2.4 coleção Mapa

recolha Mapa do List, Set, Queue são bastante diferentes, de fato, semelhante à estrutura de dados de chave / valor é.

  • Em primeiro lugar, a interface do Mapa é a interface de nível superior. E List, Set, Fila Da mesma forma, Mapa definição de interface é o funcionamento da estrutura de dados da tabela hash. Por exemplo, é comum colocar, get, keySet e assim por diante.
  • Em seguida, há AbstractMap classe abstrata. E Lista e similares, abstrato implementar a interface Mapa AbstractMap. Como mostrado acima, a estrutura de toda a classe Mapa pode ser dividido em um conjunto de vermelho, amarelo, verde três.

2.4.1 Hash alcançar

Vermelho pode ser visto como parte de um hash implementação Mapa.

  • AbstractMap ter um HashMap categoria específica. HashMap é uma realização AbstractMap algoritmos baseados em hash.
  • Então, LinkedHashMap e WeakedHashMap herdou HashMap.

LinkedHashMap HashMap é ainda alcançada, que é armazenado como uma ligados elementos de sequência lista inserção no HashMap. WeakedHashMap o HashMap é ainda alcançado, ea diferença é HashMap: referências fracas citado em WeakedHashMap, inútil se demasiado longo, será recuperado automaticamente.

2.4.2 realização ordenada

Amarelo pode ser visto como parte de uma realização ordenada Mapa coleção.

  • Em primeiro lugar, as interfaces SortedMap herdado interface Map. Tal como acontece com o conjunto, elementos Mapa não estão em ordem, SortedMap é definição de interface Mapa ordenada.
  • Então, NavigableMap herdado interface de SortedMap. Interface NavigableMap define a lógica de encontrar, fácil de seguir para alcançar.
  • Finalmente, TreeMap é a realização NavigableMap interface.

Na verdade, TreeMap é um baseado em árvore implementação Mapa rubro-negro.

Veja aqui Mapa de ler toda a metade estrutura de classe. A outra metade é baseada na implementação baseada em Dicionário (a parte verde). Mas, na verdade conseguir Mapa dicionário é velho, agora abandonado. Podemos ver dicas relevantes de comentários no código fonte.

NOTA: Esta classe é obsoleto (obsoleto) Novas implementações devem implementar a interface Map , ao invés de estender esta classe ..
Essa classe foi abandonados, novas implementações devem implementar a interface Map, ao invés de estender essa classe.

Assim, para a realização no dicionário, e nós não pretendemos explicação detalhada.

Aqui nós resumir toda a implementação coleção classe Map:

  • HashMap: Mapa coleção de implementação clássico hash.
  • LinkedHashMap: Com base no HashMap, contribui para inserir elementos de manutenção lista.
  • WeakedHashMap: HashMap com base em referências fortes tornam-se fracos.
  • Treemap: Ordenada alcançar coleção Mapa.

2.5 Ferramentas

Há um conjunto de ferramentas: Iterator iterator, iterator ListIterator, classe de enumeração de enumeração, arrays e coleções classes.

2.5.1 Iterator iterator

Um Repetidor é utilizado para atravessar uma sequência e seleccionar objectos. Iterator apenas um sentido da mudança da Java. Pode ser visto no ArrayList, WeakHashMap outras classes de coleção implementar essa interface para definir diferentes tipos de travessia.

2.5.2 ListIterator iterador

ListIterator herdou a interface Iterator, por isso tem recursos mais poderosos que permite o movimento de mão dupla. No entanto, seu nome pode ser visto, ele só pode aplicar-se a percorrer a coleção List.

2.5.3 Enumeração folha 举 类

Foi introduzido na interface do JDK 1.0. E o papel Iterator, assim como através da coleção. Mas a função de enumeração Iterator que menos. Enumeração só pode ser usado na Hashtable, Vector, Pilha no. Esta interface foi substituído com um iterador convencional, embora enumeração não foi abandonada, mas o código tem sido raramente usado.

O documento oficial também recomendou Iterator interface em vez de interface de enumeração.

2.5.4 Arrays

classe java.util.Arrays pode facilmente operar o array, ele fornece todos os métodos são estáticos.

2.5.3 coleções

java.util.Collections contendo várias ferramentas é um conjunto de operações relacionadas método estático polimórfico, o que serve quadro Coleção Java.

3 resumo

Passamos um monte de espaço para explicar a coleção de lista, coleção Set, coleções Mapa, coleções fila e Iterator e outras ferramentas. Foi realizada uma análise detalhada deste conjunto de estrutura de classe, de modo que uma melhor compreensão da relação entre eles.

Às vezes queremos aprender muito dim-lo. Eu tenho um amigo apenas uma ArrayList comum, HashMap pode ah. Para esta pergunta, gostaria de compartilhar algumas colheita.

Em primeiro lugar, torná-lo mais familiarizado com as diferenças entre classes.  Se usarmos apenas uma ou duas classes, então não sabemos quando e que tipo. Por exemplo: quando usar HashMap, quando usar Hashtable? Iterator interagir Qual é o papel? fonte JDK chamado Quais são as características?

Em segundo lugar, fonte conveniente para a expansão.  Quando mergulhar no conjunto de coisas, sabemos que o original é a interface List desta definições de tipo de dados, e AbstractList Lista de abstração é alcançado. Portanto, se queremos alcançar uma estrutura de lista personalizada, então podemos herdar a classe diretamente AbstractList, de modo a alcançar uma rápida implementação. Mas se você não tem um estudo em profundidade do mesmo? Você só pode ser escrito a partir do zero, muita energia foi desperdiçada ah. Você aprende desta forma, em seguida, para você expandir Primavera também é uma boa fonte de ajuda.

No próximo artigo, vamos mergulhar na implementação específica de cada set.

 

Acho que você gosta

Origin www.cnblogs.com/youngao/p/12518875.html
Recomendado
Clasificación