Diferença entre Map / Mapping / HashMap(Resolvido)

Bom dia a todos, alguém poderia me explicar a diferença entre os três?

Um Map/Mapa (ou tabela de símbolos, ou tabela de identificadores, ou array associativo ou dicionário) define uma estrutura de dados que associa chaves com valores. Em Java há uma interface que define esse contrato, ou seja, os métodos que as classes que a implementarão vão precisar fornecer para que a estrutura de dados funcione de forma transparente ao usuário (programador). A implementação de um mapa pode ser feita de várias formas e, em Java, algumas delas já estão prontas. Uma delas é usando tabelas de dispersão, no caso, o HashMap. O HashMap garante performance, desde que o método hashCode herdado de Object esteja implementado corretamente na classe que será usada para gerar as chaves, mas não garante a ordem de inserção dos pares chave/valor. Se vc precisar saber a ordem em que as chaves foram inseridas, vc pode usar a LinkedHashMap. Uma outra implementação em Java de um mapa é o TreeMap, que usa nos bastidores, ao invés de uma tabela de dispersão, uma árvore vermelho-preto e te garante que as chaves estão sempre inseridas em ordem, seguindo uma relação de ordem total estabelecida na interface Comparable ou por um comparador ao se usar um Comparator. Existem diversos outros detalhes e a hierarquia de interfaces não é tão simples assim dentro do Java Collections Framework, mas a ideia é essa que estou te passando.

Em relação a Mapping, como vc usou a tag hibernate na sua postagem, esse termo está relacionado à capacidade (e objetivo) do framework Hibernate em mapear uma classe/pojo/entidade/DTO/TO em uma relação/tabela do SGBD relacional e vice-versa.

Um adendo histórico em relação a implementação dos mapas em Java é que o Java Collections Framework foi implementado na versão 1.2 do Java, chamado de Java 2 e lançado em 1998. Até então, a estrutura de dados disponível para fazer esse tipo de operação era a Hashtable, que ainda está na plataforma por motivos de compatibilidade, mas que não deve ser usada, pois por padrão é implementada com sincronização, o que derruba a performance em situações que demandam uso intensivo da estrutura de dados.

Segundo a documentação:
As of the Java 2 platform v1.2, this class was retrofitted to implement the Map interface, making it a member of the Java Collections Framework. Unlike the new collection implementations, Hashtable is synchronized. If a thread-safe implementation is not needed, it is recommended to use HashMap in place of Hashtable . If a thread-safe highly-concurrent implementation is desired, then it is recommended to use ConcurrentHashMap in place of Hashtable.

O pior é de tudo é que provavelmente, até hoje*, ainda deve ter professor que ensina esse tipo de coisa como algo que deve ser usado, assim como a classe Vector que “sofre” dos mesmos “problemas” e deve ser substituída por alguma implementação da interface List sem sincronização, como ArrayList por exemplo.

Segundo a documentação:
As of the Java 2 platform v1.2, this class was retrofitted to implement the List interface, making it a member of the Java Collections Framework. Unlike the new collection implementations, Vector is synchronized. If a thread-safe implementation is not needed, it is recommended to use ArrayList in place of Vector.

Em situações em que é necessário haver sincronização nas estruturas de dados, espera-se o uso das implementações contidas no pacote java.util.concurrent.

* eu digo até hoje, pois onde eu dou aula há 11 anos, eu via quando eu entrei gente ensinando esse tipo de barbaridade sem explicar o contexto. Imagina, anos 2010 e gente falando de coisa dos anos 1990 como se fosse o que deve ser feito.

4 curtidas

muito obg @davidbuzatto

1 curtida