As coleções Java são kits de ferramentas fornecidos pela Java, que contêm estruturas de dados comumente usadas: coleções, listas vinculadas, filas, pilhas, matrizes, mapas, etc. A localização do Java Collection Toolkit é Java.util.*
As coleções Java podem ser divididas em 4 partes: lista de lista, coleta de conjunto, mapa do mapa, classes de ferramentas (iterador de iterador, classe de enumeração de enumeração, matrizes e coleções).
A estrutura do kit de ferramentas de coleção Java é mostrada abaixo.
NOTA: Olhando para o diagrama da estrutura acima, primeiro compre seu porta -malas, a saber e o mapa.
A coleção é uma interface, uma coleção altamente abstrata, que contém as operações e propriedades básicas da coleção.
A coleção inclui duas filiais: Lista e definição.
(01) A lista é uma fila ordenada e cada elemento possui seu índice. O valor do índice do primeiro elemento é 0.
As classes de implementação da lista incluem LinkedList, ArrayList, Vector, Stack.
(02) O conjunto é uma coleção que não permite elementos duplicados.
As classes de implementação do conjunto incluem Hastset e TreeSet. O hashset depende do hashmap, que é realmente implementado através do hashmap; O TreeSet depende do TREEMAP, que é realmente implementado através do Treemap.
O MAP é uma interface de mapeamento, nomeadamente pares de valor-chave-chave. Cada elemento no mapa contém "uma chave" e "um valor correspondente à chave".
AbstractMap é uma classe abstrata que implementa a maioria das APIs na interface do mapa. Hashmap, Treemap e FrawHashmap são todos herdados do AbstractMap.
Embora os herdos de hashtable do dicionário, ele implementa a interface do mapa.
Em seguida, vamos olhar para o iterador. É uma ferramenta para atravessar coleções, ou seja, geralmente atravessamos as coleções através do iterador do iterador. Dizemos que a coleção depende do iterador porque as classes de implementação da coleção devem implementar a função iterator () e retornar um objeto iterador.
O ListIterator existe especificamente para a lista de travessia.
Vejamos a enumeração novamente, é uma classe abstrata introduzida pelo JDK 1.0. Como o iterador, também está atravessando uma coleção; Mas a enumeração tem menos funções que o iterador. No diagrama de blocos acima, a enumeração só pode ser usada em pilha de hashtable, vetor.
Finalmente, olhe para matrizes e coleções. São duas classes de ferramentas que operam matrizes e coleções.
Com a estrutura geral acima, analisaremos cada classe separadamente.
Arquitetura de coleção
Abaixo, resumiremos a coleção. Vamos dar uma olhada nos diagramas de relacionamento de algumas aulas de estrutura na coleção:
A coleção é uma interface, e suas duas principais ramificações são: lista e definição.
Lista e conjunto são interfaces, e eles herdam da coleção. A lista é uma fila ordenada e pode haver elementos repetidos na lista; Enquanto Set é uma coleção em conceitos matemáticos, e não há elementos repetidos no conjunto!
Lista e conjunto têm suas próprias classes de implementação.
Para facilitar a implementação, a classe abstrata abstractCollection é definida na coleção, que implementa a maioria das funções da coleção; Dessa forma, na classe de implementação da coleção, podemos salvar a codificação duplicada herdando o abstrataCollection. AbstractList e AbstractSet tanto herdados da AbstractCollection, a classe de implementação de lista específica herda da AbstractList e da classe de implementação do conjunto herda do AbstractSet.
Além disso, existe uma função iterator () na coleção, usada para retornar uma interface do iterador. Geralmente, atravessamos a coleção através do iterador Iterador. ListIterator é exclusivo da interface da lista. Na interface da lista, um objeto Listiterator é retornado através do listiterator ().
Em seguida, vamos dar uma olhada na introdução de cada interface e classe abstrata; Em seguida, teremos um entendimento detalhado da classe de implementação.
1. Introdução à coleção
A definição de coleção é a seguinte:
Coleção de interface pública <E> estende iterable <E> {} É uma interface, uma coleção altamente abstrata, que contém as operações básicas da coleção: adicionando, excluindo, limpando, atravessando (leitura), seja vazia, obtendo o tamanho, seja protegido por um determinado elemento etc.
Todas as subclasses da interface de coleta (subclasse direta e subclasse indireta) devem implementar dois construtores: construtores sem parâmetros e construtores com a coleta de parâmetros. Um construtor com parâmetros pode ser usado para converter o tipo de coleção.
// Collection APIabstract boolean add(E object)abstract boolean addAll(Collection<? extends E> collection)abstract void clear()abstract boolean contains(Object object)abstract boolean containsAll(Collection<?> collection)abstract boolean equals(Object object)abstract int hashCode()abstract boolean isEmpty()abstract Iterator<E> iterator()abstract boolean remove(Object object)abstract boolean Removeall (coleção <?> coleção) abstrato boolean retainall (coleção <?> collection) abstract int size () abstrato <t> t [] Toarray (t [] matriz) objeto abstrato [] ToArray ()
2. Introdução à lista
A definição de lista é a seguinte:
Lista de interface pública <E> estende a coleção <E> {} A lista é uma interface herdada da coleção, ou seja, a lista é um tipo de coleção. A lista é uma fila ordenada e cada elemento na lista possui um índice; O valor do índice do primeiro elemento é 0 e o valor do índice dos elementos subsequentes +1 por sua vez. Ao contrário do conjunto, os elementos duplicados são permitidos na lista. A introdução oficial da lista é a seguinte:
Uma lista é uma coleção que mantém uma ordem para seus elementos. Cada elemento da lista tem um índice. Assim, cada elemento pode ser acessado por seu índice, com o primeiro índice sendo zero. Normalmente, as listas permitem elementos duplicados, em comparação com os conjuntos, onde os elementos precisam ser únicos.
Sobre API. Como a lista herda da interface de coleta, ela contém naturalmente todas as interfaces funcionais da coleção; Como a lista é uma fila ordenada, ela também possui sua própria interface de API. Os principais incluem "Adicionar, Excluir, obter e modificar elementos no local especificado", "Obtenha subqueus na lista", etc.
// Collection APIabstract boolean add(E object)abstract boolean addAll(Collection<? extends E> collection)abstract void clear()abstract boolean contains(Object object)abstract boolean containsAll(Collection<?> collection)abstract boolean equals(Object object)abstract int hashCode()abstract boolean isEmpty()abstract Iterator<E> iterator()abstract boolean remove(Object object)abstract boolean Removeall (coleção <?> Coleção) RETENHA DE BOOLEANO RESUMO (Coleção <?> Coleção) Abstract Int tamanho () Resumo <T> t [] Toarray (T [] Array) Objeto abstrato [] Toarray () // Comparado com a coleção, a coleção da List API: Resumo Void Add (Int Location) Resumo e abstrato (INT Location, INTENNES <? LastIndexOF (objeto Objeto) Listiterator <E> listiterator (int localização) resumo listiterator <e> listiterator () resumo e remover (int localização) abstrato e conjunto (int localização, e objeto) Lista de resumos <E> sublist (int, int end)
3. Introdução ao conjunto
O conjunto é definido da seguinte maneira:
Conjunto de interface pública <e> estende a coleção <E> {} O SET é uma interface herdada da coleção, ou seja, o conjunto também é um tipo de coleção. O conjunto é uma coleção sem elementos duplicados.
Sobre API. A API do Set é exatamente a mesma que a coleção.
// Set's APIabstract boolean add(E object)abstract boolean addAll(Collection<? extends E> collection)abstract void clear()abstract boolean contains(Object object)abstract boolean containsAll(Collection<?> collection)abstract boolean equals(Object object)abstract int hashCode()abstract boolean isEmpty()abstract Iterator<E> iterator()abstract boolean remove(Object object)abstract boolean Removeall (coleção <?> coleção) abstrato boolean retainall (coleção <?> collection) abstract int size () abstrato <t> t [] Toarray (t [] matriz) objeto abstrato [] ToArray ()
4. AbstractCollection
A definição de abstrataCollection é a seguinte:
Classe abstrata public abstractCollection <e> implementa a coleção <E> {} AbstractCollection é uma classe abstrata que implementa funções na coleção, exceto iterator () e size ().
A principal função do AbstractCollection: ele implementa a maioria das funções na interface de coleta. Isso facilita outras classes para implementar a coleta, como ArrayList, LinkedList, etc. Se essas classes desejam implementar a interface de coleta, a maioria das interfaces foi implementada herdando o AbstractCollection.
5. AbstractList
A definição de abstractList é a seguinte:
classe abstrata public abstractlist <e> estende a lista de implementos abstrataCollection <E> <E> {} AbstractList é uma classe abstrata que herda da abstrationCollection e implementa a interface da lista. Ele implementa funções na lista, exceto size () e get (int location).
A principal função do AbstractList: ele implementa a maioria das funções na interface da lista. Isso facilita outras classes para herdar a lista.
Além disso, em comparação com a interface do abstrataCollection, a interface iterator () é implementada na classe abstrata abstrata.
6. AbstractSet
A definição de AbstractSet é a seguinte: Public Abstract Class AbstractSet <E> estende o abstractCollection <E> implementos conjunto <E> {} AbstractSet é uma classe abstrata que herda da abstrationCollection e implementa a interface do conjunto. Como a interface definida e a API na interface de coleta são exatamente iguais, o conjunto não possui sua própria API separada. Como o abstrateCollection, ele implementa funções na lista, exceto iterator () e size ().
A principal função do AbstractSet: implementa a maioria das funções na interface do conjunto. Isso facilita outras classes para implementar interfaces de conjunto.
7. Iterador
A definição de iterador é a seguinte:
interface pública iterator <e> {} O iterador é uma interface, que é um iterador da coleção. Uma coleção pode ser percorrida pelos elementos da coleção através do iterador. A interface da API fornecida pelo iterador inclui: se o próximo elemento existe, obtenha o próximo elemento e exclua o elemento atual.
Nota: Quando o iterador atravessa a coleção, ela é baseada no mecanismo de falha. Ou seja, quando um certo thread a atravessa um conjunto através de um iterador, se o conteúdo do conjunto for alterado por outros threads; Em seguida, quando o Thread A acessa o conjunto, uma exceção concorrente de exceção de exceção será lançada, resultando em um evento Fail-Fast. Em relação ao conteúdo detalhado do Fail-Fast, explicaremos isso especificamente após o resumo do Fail-Fast.
// Apiabstract boolean hasnext () e próximo () abstrato do iterador REMOVIR REMOVER ()
8. Listiterator
A definição de listiterator é a seguinte:
Listiterator de interface pública <E> estende o iterador <E> {} O Listiterator é uma interface herdada do Iterator, que é um iterador de fila. Especialmente usado para uma lista conveniente, ela pode fornecer travessias para frente/para trás. Comparado com o iterador, adiciona interfaces de API, como adicionar, se o elemento anterior existe e a obtenção do elemento anterior.
// API do listiterator // herdado da interface do iterador abstrato boolean hasnext () abstrato e next () abstrato void remover () // Adicione interface da API Resumo void add (e objeto) abstrato boolean hasprevious () abstrato Int NextIndex () abstrato e anterior () abstrato int anterior () abstrato do abstrato ().