Qual a diferença entre Map e HashMap?

Olá, minha dúvida é bem básica: qual é a diferença entre as classes Map e HashMap? :wink:

Olá,

Map é uma interface, não uma classe! O mapa é uma estrutura de dados que permite que você ligue cada valor a uma chave. Assim podemos acessar o valor pela chave.

A idéia de ser uma interface é poder trocar de implementação se muito impacto, facilitando a manutenção.

O HashMap, que na verdade herda de AbstractMap, que implementa a interface Map (é um padrão de projeto essa arquitetura, cujo nome não me lembro agora :frowning: ), é um tipo de Map, pois ele realiza a interface através do AbstractMap. A característica do HashMap é que ele não autoriza valores duplicados de chave, sendo que o último substitui o já adicionado.

Basicamente usamos assim:

Map map = new HashMap();
map.put("elemento1", 1); //elemento1 é a cahve (key) e 1 o valor associado a ela
map.get("elemento1"); //retorna 1

Temos também os genéricos(generics) que permitem “tipar” o mapa sem uma classe específica. Assim evitamos erros em tempo de execução e corrigimos os mesmo enquanto compilamos. (se você tentar usar uma String em um lugar cujo genérico diz para ele ser Inteiro, por exemplo)

É mais ou menos isso, me corrijam se eu estiver errado, correria aqui!

1 curtida

Map não é classe, é interface. Ela define o contrato que um mapa, aka dicionário ou array associativo, deve seguir.
HashMap é uma mapa que usa códigos de hash para organizar os objetos dentro dele.

[]´s

Map é uma interface, não uma classe.

Ela é implementada pelas classes HashMap e TreeMap, entre outras.

Usualmente usa-se a interface para declarar variáveis e parâmetros.

Map<String, String> m = new HashMap<String, String>();

Se precisar de uma versão “ordenada” do Map, então use a subinterface SortedMap.

SortedMap<String, String> m = new TreeMap<String, String>();