DEV Community

Discussion on: O que é um map?

Collapse
 
eduardoklosowski profile image
Eduardo Klosowski

Achei estranho o Map não ter restrição ao tipo de valor usado como chave, uma vez que o Map é implementado com hash tree, como você disse. Em várias linguagens, para que isso seja possível, o tipo da chave precisa implementar uma função de hash, já que a estrutura depende disso para funcionar. Como isso funciona no Elixir? Se todos os tipos já tiverem uma função de hash por padrão, nesse caso poderia ser qualquer tipo, uma vez que a própria linguagem já garante essa condição.

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