DEV Community

Discussion on: O que é um map?

Collapse
 
dnovais profile image
Diego Novais

Sim, Map não tem restrição ao tipo usado na chave. Mas geralmente é mais comum o uso de string ou atoms na chave.
Pelo que eu pude entender, aprofundando um pouco mais, no Erlang o map era em table hash table, a patir da verão 18 passou a ser implementado o Map usando Hash Tree para eliminar o problema que se tem quando os maps crescem demais.

O Hash Tree é uma estrutura para organizar dados arbitrários em uma árvore amplamente ramificada. É comum seu uso em linguagens funcionais para contrução de mapas de hash imutáveis. Mais complexa do que uma hash table, e oferece alguns benefícios:

  • Capacidade de aumentar o mapa indefinidamente sem redimensionar ou encadear (sem penalidades de re-hash)

  • Capacidade de compartilhar estruturas repetidas entre árvores semelhantes.

E pelo que vi, quando quisermos inserir ou manipular um par de valores-chave, usaremos o código hash da chave para escolher um caminho através do trie até encontrar uma posição. O que permite que sejam estruturas de dados persistentes e com a imutabilidade dos hashs, faz com que não tenha restrição quanto o tipo da chave no map.

Collapse
 
eduardoklosowski profile image
Eduardo Klosowski

Interessante, então é usado de fato o hash. Em algumas linguagens não existe uma implementação padrão da função que gera os hashs, então para usar certos tipos como chave, precisa implementar manualmente a interface para isso (pensando em orientação a objetos). Árvore são bastante interessantes também, inclusive como criá-las ou mantê-las balanceadas, tendo um funcionamento parecido com a busca binária, além de poder usar a própria ordenação pelos seus valores em vez do hash.

Thread Thread
 
dnovais profile image
Diego Novais

Sim árvores são bem interessante mesmo, quero trazer algo sobre isso no futuro também =D.

Interessante esse video! Gostei!

Ah e obrigado! Foi muito bom nossa conversa e até aprendi mais detalhes a respeito dos Maps. =D