Conhecendo a interface Map do Java
Veja neste artigo, tudo relacionado a interface Map e suas classes implementadoras. Saiba como funcionam os métodos principais e o processo de desenvolvimento para ordenar um mapa. Confira!
Os objetos “Map” confiam seus dados em um algoritmo hash (hash code). Esse algoritmo transforma uma grande quantidade de dados em uma pequena quantidade de informações, sendo que o mecanismo de busca se baseia na construção de índices.
Um exemplo prático pode ser usado como uma lista telefônica onde a letra seria o índice a ser procurado, para conseguir achar mais fácil o nome desejado.
Interface Map do Java
Essa interface é um objeto que mapeia valores para chaves, ou seja, através da chave consegue ser acessado o valor configurado, sendo que a chave não pode ser repetida ao contrário do valor, mas se caso tiver uma chave repetida é sobrescrito pela última chamada. Também faz parte do pacote java.util e não possui métodos da interface Collection.
Na Figura 2. consegue ser visualizado quais classes podem ser implementadas pela interface Map.
A sintaxe deve obedecer a lugares apontados da chave e valor, pois cada chave leva somente um elemento, segue o exemplo da Listagem 1 abaixo:
Map<E> mapa = new Type();
Sintaxe
- E - é o objeto declarado, podendo ser classes Wrappers ou tipo de coleção.
- Type - é o tipo de objeto da coleção a ser usado.
import java.util.HashMap;
import java.util.Map;
public class TestaInterfaceMap {
public static void main(String[] args) {
Map<integer, string=""> mapaNomes = new HashMap<integer, string="">();
mapaNomes.put(1, "João Delfino");
mapaNomes.put(2, "Maria do Carmo");
mapaNomes.put(3, "Claudinei Silva");
System.out.println(mapaNomes);
//resgatando o nome da posição 2
System.out.println(mapaNomes.get(2));
}
}
Listagem 1. Exemplo de atribuição e impressão de valores.Veja na Figura 3, como se comporta a interface do exemplo da Listagem 1.
Saiba mais: Primeira aplicação Web com Spring MVC e JPA
Classe HashMap
Essa classe é a implementação da interface Map mais trabalhada no campo de desenvolvimento. O exemplo dessa classe está apresentado no exemplo da Listagem 2.
Características
- Os elementos não são ordenados;
- É rápida na busca/inserção de dados;
- Permite inserir valore e chaves nulas;
HashMap mapa = new Type();
Sintaxe
- E - é o objeto declarado, podendo ser classes Wrappers ou tipo de coleção.
- Type - é o tipo de objeto da coleção a ser usado.
Métodos úteis
Esses métodos oferece bastante ajuda quando é trabalhado com a interface Map.
- values() - É uma Collection com todos os valores que foram associados a alguma das chaves.
- keySet() - Retorna um Set com as chaves do mapa especificado.
- entrySet() - Retorna um conjunto de Maps contido no mapa configurado, podendo ser possível acessar suas chaves e valores.
- put (Key key, Value value) - Associa um valor a uma chave específica.
Para interagir sobre um mapa é preciso trabalhar com a interface Collection ou métodos set() para converter esse mapa em um conjunto de dados.
Para saber mais sobre os métodos, acesse o link abaixo:
- //docs.oracle.com/javase/6/docs/api/java/util/Map.html
- //docs.oracle.com/javase/6/docs/api/java/util/HashMap.html
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
public class TestaInterfaceMap {
public static void main(String[] args) {
Map<integer, string=""> mapaNomes = new HashMap<integer, string="">();
mapaNomes.put(1, "João Delfino");
mapaNomes.put(2, "Maria do Carmo");
mapaNomes.put(3, "Claudinei Silva");
//Collection<integer> conjNomes = mapaNomes.keySet();
Set<entry<integer, string="">> set = mapaNomes.entrySet();
Iterator it = set.iterator();
System.out.println("Código\t\tValor");
//getKey() - recupera a chave do mapa
//getValue() - recupera o valor do mapa
while(it.hasNext()){
Entry<integer, string=""> entry = (Entry)it.next();
System.out.println(entry.getKey() + "\t\t"+entry.getValue());
}
}
}
Listagem 2. Percorrendo dados em um mapa de dados.Também pode ser usado para percorrer um mapa o “for aprimorado”, mas vale informar que para percorrer os valores o seu valor começa por 1 e não por 0, conforme mostrado na Listagem 3.
for(int i = 1; i <= mapaNomes.size(); i++){
System.out.println(i + " - " + mapaNomes.get(i));
}
Listagem 3. Percorrendo dados de um mapa com “for aprimorado”Ordenação de HashMap
Existe uma questão simples para fazer a ordenação de um mapa de dados. Para aplicar essa ordenação é necessário criar antes uma classe personalizada que implemente a interface Comparator do tipo inteiro e também trabalhar com a classe TreeSet. Veja maiores detalhes nas Listagens 4 e 5 como funciona a aplicação.
import java.util.Comparator;
import java.util.Map;
public class ComparatorInts implements Comparator<integer> {
Map<integer, string=""> base;
public ComparatorInts(Map<integer, string=""> base) {
this.base = base;
}
@Override
public int compare(Integer o1, Integer o2) {
return base.get(o1).compareTo(base.get(o2));
}
}
Listagem 4. Comparator personalizado.import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
public class OrdenandoHashMap {
public static void main(String[] args) {
HashMap<integer, string=""> mapaNomes = new HashMap<integer, string="">();
mapaNomes.put(1, "João Delfino");
mapaNomes.put(2, "Maria do Carmo");
mapaNomes.put(3, "Claudinei Silva");
mapaNomes.put(4, "Amélia Mourão");
ComparatorInts compInt = new ComparatorInts(mapaNomes);
Map<integer, string=""> mapaOrdenado = new TreeMap(compInt);
mapaOrdenado.putAll(mapaNomes);
for(Integer valor : mapaOrdenado.keySet()){
System.out.println(valor + " " + mapaNomes.get(valor));
}
}
}
Listagem 5. Ordenação de um mapa por valor.Classe HashTable
Essa classe trabalha com algoritmo hash para conversão das chaves e um mecanismo de pesquisa de valores, sendo que tem seus métodos sincronizados (thread-safe) que permitem checar acessos concorrentes e armazenagem. Também possui uma eficiente pesquisa de elementos baseados em chave-valor, mas não aceita valores nulos.
HashTable<E> mapa = new Type<E>();
Sintaxe
- E - é o objeto declarado, podendo ser classes Wrappers ou tipo de coleção.
- Type - é o tipo de objeto da coleção a ser usado.
Veja na Listagem 6 é mostrado um exemplo de como pode ser desenvolvido um mapa com objeto “Cliente” por HashTable.
import java.util.Hashtable;
public class TesteHashTable {
public static void main(String[] args) {
Cliente c1 = new Cliente("754.856.869-88","Valdinei Santos");
Cliente c2 = new Cliente("828.929.222.12","Claire Moura");
Cliente c3 = new Cliente("156.565.556-88","Vagner Seller");
Hashtable<integer, cliente=""> ht = new Hashtable<integer, cliente="">();
ht.put(1, c1);
ht.put(2, c2);
ht.put(3, c3);
System.out.println("CPF \t\t Cliente");
for (int i = 1; i <= ht.size(); i++) {
System.out.println(ht.get(i));
}
}
}
class Cliente{
public String cpf;
public String nome;
public Cliente(String cpf, String nome) {
this.cpf = cpf;
this.nome = nome;
}
@Override
public String toString() {
return cpf + " | " + nome;
}
}
Listagem 6. Trabalhado com HashTableConforme visto nesse artigo foi abordado a interface Map e suas classes implementadoras, sendo que mostrou-se conceitos e práticas de métodos que são mais utilizados nos desenvolvimentos.
Espero que tenham gostado e até a próxima!
Links Úteis
- Como conectar ao PostgreSQL no Entity Framework:
Neste conteúdo você aprenderá a utilizar o Entity Framework em conjunto com o banco de dados PostgreSQL. - Java Streams API - Trabalhando com coleções:
Descubra neste exemplo de Java sobre Streams API como trabalhar com Collections de forma simplificada, reduzindo a quantidade de código escrito para tarefas comuns como sort, filter e map. - $_POST e $_GET: Acessando informações de formulários em PHP:
Neste conteúdo você aprenderá a acessar informações passadas por formulários no PHP com as variáveis globais $_GET e $_POST.
Saiba mais sobre Java ;)
- Guias Java:
Encontre aqui os Guias de estudo que vão ajudar você a aprofundar seu conhecimento na linguagem Java. Desde o básico ao mais avançado. Escolha o seu! - Cursos de Java:
Torne-se um programador Java completo. Aqui você encontra cursos sobre as mais ferramentas e frameworks do universo Java. Aprenda a desenvolver sites e web services com JSF, Jersey, Hibernate e mais. - Hibernate:
Neste Guia de Referência você encontrará cursos, devcasts e artigos que demonstram todos os recursos do Hibernate. Entre eles, é claro, como persistir dados em Java com o framework ORM mais utilizado pelos desenvolvedores.
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Vídeo