"Olá, amigo!"

"Oi, Ellie!"

"Hoje vamos entender a estrutura das coleções de uma vez por todas."

"Eu esperei muito tempo por isso."

"Você já sabe o que são coleções e sabe como trabalhar com elas. É hora de organizar seu conhecimento em um sistema estrito. Então, muitos 'por que' e 'como' perguntas desaparecerão e a maioria das coisas se tornará óbvia."

" Interfaces de coleção . A estrutura de herança das interfaces de coleção é mais ou menos assim:"

Interfaces de coleção - 1

Observe duas coisas.

Primeiro, tudo o que você vê aqui é uma interface.

Em segundo lugar, as setas significam «herdados».

"Em outras palavras, List, Set e Queue herdam Collection, mas Map não?"

"Sim. As classes abstratas herdam essas interfaces e, por sua vez, as implementações que você conhece herdam essas classes abstratas:  ArrayList, Hashtable, TreeSet,… "

"Você está certo."

"Agora vamos ver para que servem os métodos dessas interfaces:"

Métodos do Iterable<E>: interface:

Métodos Descrição
Iterator<T> iterator(); Retorna um objeto iterador.

"Isso não parece o suficiente."

"Bem, isso é quantos existem. Isso é tudo para iteradores. Não os cobriremos agora, mas os cobriremos em detalhes em breve."

Métodos da Coleção<E>: interface:

Métodos Descrição
boolean add(E e); Adiciona um elemento à coleção
boolean addAll(Collection<? extends E> c); Adiciona elementos à coleção
void clear(); Remove todos os elementos da coleção
boolean contains(Object o); Verifica se a coleção contém o elemento.
boolean containsAll(Collection<?> c); Verifica se a coleção contém os elementos.
boolean equals(Object o); Verifica se as coleções são equivalentes
int hashCode(); Retorna o código hash
boolean isEmpty(); Verifica se a coleção está vazia.
Iterator<E> iterator(); Retorna um objeto iterador
boolean remove(Object o); Remove um elemento da coleção
boolean removeAll(Collection<?> c); Remove elementos da coleção
boolean retainAll(Collection<?> c); Remove todos os elementos que não estão em c
int size(); Retorna o tamanho da coleção
Object[] toArray(); Converte a coleção em uma matriz
<T> T[] toArray(T[] a); Converte a coleção em uma matriz

"Já sou sólido em tudo aqui. Usei metade desses métodos e encontrei a outra metade."

"Ótimo, vamos continuar então."

Métodos da  List<E>: interface:

Métodos Descrição
void add(int index, E element); Adiciona elementos no meio da coleção
boolean addAll(int index, Collection<? extends E> c); Adiciona elementos à coleção
E get(int index); Retorna um elemento por índice
int indexOf(Object o); Retorna o índice (número) de um elemento
int lastIndexOf(Object o); Retorna o índice do último elemento.
ListIterator<E> listIterator(); Retorna um iterador para a lista
ListIterator<E> listIterator(int index); Retorna um iterador para a lista
E remove(int index); Remove um elemento pelo seu índice
E set(int index, E element); Define um novo valor por índice
List<E> subList(int fromIndex, int toIndex); Retorna uma subcoleção

"Também aqui nada de radicalmente novo. Já sei quase tudo sobre coleções, o que não posso deixar de me alegrar."

"Bem, acho que posso encontrar algo que irá surpreendê-lo. Mas vamos continuar examinando as interfaces:"

Métodos do Set<E>: interface:

Métodos Descrição
Sem métodos

"A interface Set não possui nenhum método novo - apenas aqueles que ela herda."

"Sim, vi que a interface Interable também não tinha nada.

"Por outro lado, menos métodos significa menos para lembrar!"

"Seu otimismo de afirmação da vida me deixa feliz."

"A interface Set é herdada por duas interfaces com métodos: SortedSet e NavigableSet. Mas não vou passar por cima deles, ou nunca terminaremos."

"Em vez disso, deixe-me dar uma visão geral das classes e interfaces que descrevem as coleções em Java."

"Pode vir."

"Então segure firme:"

Interfaces de coleção - 2

"Uau, isso é enorme!"

"Bem, não é tão grande. Além disso, lembre-se de que as classes abstratas são totalmente opcionais. Mas é bom lembrar qual classe implementa quais interfaces. Isso pode ser útil com bastante frequência."

"Ah, também gostaria de observar que algumas coleções são consideradas obsoletas."

"Quais são esses?"

"Estou falando sobre as classes Vector, Stack, Dictionary e Hashtable. Essas são versões sincronizadas (thread-safe) de coleções comuns."

"Mas Java adicionou uma biblioteca de simultaneidade especial com muitas coleções que não só podem ser acessadas de outros encadeamentos, mas também têm uma implementação muito mais eficiente.  ConcurrentHashMap é muito mais eficiente que Hashtable ."

"Você pode usar as coleções Vector, Stack, Dictionary e Hashtable, mas isso não é recomendado."

"Entendi, vou manter isso em mente."

"Obrigado, Ellie!"