"E, finalmente, vou falar sobre Map."

"Map, como você sabe, armazena um conjunto de pares chave-valor. As chaves devem ser únicas, mas os valores podem ser qualquer coisa. Se você adicionar um par chave-valor a um mapa e a coleção já contiver a chave, então o valor antigo será substituído pelo novo. Em outras palavras, a chave age como um índice especial que pode ser qualquer objeto ."

Mapa é um termo matemático que denota um conjunto de pares (x, y), em que cada x único corresponde a algum y.

Os programadores gostam muito de Map, então aqui apresentamos 4 coleções diferentes que implementam a interface Map:

"Aqui está sua estrutura de herança simples:"

Hierarquia do mapa - 1

"O amarelo indica que Entry é uma interface aninhada na interface Map ."

"A entrada foi adicionada para descrever um par de elementos como uma única entidade."

"Aqui estão os métodos de Map<K,V>:"

Métodos Descrição
int size() Retorna o número de pares no mapa.
boolean isEmpty() Verifica se o mapa está vazio.
boolean containsKey(Object key) O mapa contém a chave especificada?
boolean containsValue(Object value) O mapa contém o valor especificado?
V get(Object key) Retorna o valor para a chave especificada.
V put(K key, V value) Define um novo valor para a chave.
O método retorna o valor antigo ou nulo
putAll(Map<? extends K, ? extends V> m) Adiciona pares de outro mapa.
void clear() Limpa o mapa, ou seja, remove todos os pares.
Set<K>keySet() Retorna um conjunto de chaves.
Collection<V>values() Retorna uma coleção de valores.
Set<Map.Entry<K, V>>entrySet() Retorna um conjunto de pares.

"K e V são os parâmetros de tipo para as chaves e valores."

"Bem, estou familiarizado com a maioria dos métodos, mas só trabalhei com alguns deles."

"O que mais você pode me dizer sobre a classe Entry?"

"Esta classe descreve um par de elementos. Ela possui alguns métodos:"

Métodos Descrição
getKey() Retorna a chave do par chave-valor.
getValue() Retorna o valor do par chave-valor.
setValue(V value) Define um novo valor no par chave-valor.

"A entrada é conveniente, porque você pode passar um par para um método sem passar o mapa inteiro."

"Eu vejo."

"Agora vou examinar as implementações do mapa."

"O primeiro é HashMap . Ele usa tabelas de hash para armazenar elementos. Chaves e valores podem ser de qualquer tipo, bem como nulos. A ordem dos elementos pode mudar quando a coleção muda ."

"Elementos são armazenados em um HashMap como um conjunto de grupos ou baldes. O método hashCode() de um elemento determina em qual balde ele se encaixa."

"Falando de maneira bem grosseira, os elementos com um código hash de 1 a 100 caem no primeiro balde, aqueles com um valor de 101 a 200 caem no segundo e assim por diante."

"O objetivo de armazenar elementos dessa maneira é que podemos eliminar todos os elementos em baldes irrelevantes ao procurar ou remover elementos."

"Eu vejo."

"Existe um artigo muito bom sobre o HashMap. Recomendo que você o leia: https://medium.com/@mr.anmolsehgal/java-hashmap-internal-implementation-21597e1efec3 "

"A segunda coleção é LinkedHashMap . Sua principal diferença em relação ao HashMap é que ele também armazena itens como uma lista vinculada. Em um HashMap comum, a ordem dos elementos é indefinida e pode mudar com o tempo. E você pode obter um iterador de um LinkedHashMap e use-o para percorrer todos os elementos na ordem em que foram adicionados ao LinkedHashMap. Além disso, o LinkedHashMap possui um iterador que permite percorrer todos os pares na ordem do último uso/atividade."

"Há um artigo muito bom sobre LinkedHashMap. Aqui está: https://medium.com/@mr.anmolsehgal/java-linkedhashmap-internal-implementation-44e2e2893036 "

"A terceira coleção sobre a qual gostaria de falar hoje é TreeMap ."

" TreeMap mantém seus elementos classificados em ordem crescente. Isso é obtido devido ao fato de que TreeMap usa uma árvore rubro-negra balanceada para armazenar elementos."

"Como resultado, o tempo de inserção e o tempo de pesquisa são muito baixos. Essa classe é uma ótima opção ao usar grandes quantidades de dados."

"E, claro, temos um artigo sobre TreeMap: https://medium.com/xebia-engineering/treemap-internals-199e0e0050b5 "

"O que eu não te contei ainda?"

"WeakHashMap, mas Rishi me contou sobre isso alguns dias atrás."

"Quando foi isso?"

"Quando ele falou sobre SoftReference, WeakReference e PhantomReference."

"Eu acredito em você, considerando que você nomeou todos eles corretamente. Então vá relaxar. Vejo você esta noite."

"Tchau, Ellie."