Implementações principais: HashMap, LinkedHashMap, TreeMap
Motivo: Ideal para manipular dados associativos com lambdas através de métodos como forEach, replaceAll, computeIfPresent, etc.
O Map é uma interface que representa uma coleção de pares chave-valor, onde cada chave é única.
- Implementações Principais
1.1. HashMap
Estrutura: Baseado em tabela hash
Ordem de inserção: Não garantida
Complexidade: O(1) para operações básicas (inserção, remoção, busca)
Uso recomendado: Quando a ordem não importa e a performance é prioritária
import java.util.HashMap;import java.util.Map;public class HashMapExample {public static void main(String[] args) {Map<String, Integer> estoque = new HashMap<>();estoque.put("Maçã", 50);estoque.put("Banana", 30);estoque.put("Laranja", 20);System.out.println(estoque); // Impressão sem ordem específica}}import java.util.HashMap; import java.util.Map; public class HashMapExample { public static void main(String[] args) { Map<String, Integer> estoque = new HashMap<>(); estoque.put("Maçã", 50); estoque.put("Banana", 30); estoque.put("Laranja", 20); System.out.println(estoque); // Impressão sem ordem específica } }import java.util.HashMap; import java.util.Map; public class HashMapExample { public static void main(String[] args) { Map<String, Integer> estoque = new HashMap<>(); estoque.put("Maçã", 50); estoque.put("Banana", 30); estoque.put("Laranja", 20); System.out.println(estoque); // Impressão sem ordem específica } }
Enter fullscreen mode Exit fullscreen mode
1.2. LinkedHashMap
Estrutura: Baseado em tabela hash + lista duplamente ligada
Ordem de inserção: Mantida
Complexidade: O(1) para operações básicas
Uso recomendado: Quando é necessário manter a ordem de inserção
import java.util.LinkedHashMap;import java.util.Map;public class LinkedHashMapExample {public static void main(String[] args) {Map<String, Integer> estoque = new LinkedHashMap<>();estoque.put("Maçã", 50);estoque.put("Banana", 30);estoque.put("Laranja", 20);System.out.println(estoque); // Ordem de inserção mantida}}import java.util.LinkedHashMap; import java.util.Map; public class LinkedHashMapExample { public static void main(String[] args) { Map<String, Integer> estoque = new LinkedHashMap<>(); estoque.put("Maçã", 50); estoque.put("Banana", 30); estoque.put("Laranja", 20); System.out.println(estoque); // Ordem de inserção mantida } }import java.util.LinkedHashMap; import java.util.Map; public class LinkedHashMapExample { public static void main(String[] args) { Map<String, Integer> estoque = new LinkedHashMap<>(); estoque.put("Maçã", 50); estoque.put("Banana", 30); estoque.put("Laranja", 20); System.out.println(estoque); // Ordem de inserção mantida } }
Enter fullscreen mode Exit fullscreen mode
1.3. TreeMap
Estrutura: Baseado em árvore vermelha-preta
Ordem de inserção: Ordenado pelas chaves (ordem natural ou Comparator)
Complexidade: O(log n) para operações básicas
Uso recomendado: Quando é necessário manter as chaves ordenadas
import java.util.Map;import java.util.TreeMap;public class TreeMapExample {public static void main(String[] args) {Map<String, Integer> estoque = new TreeMap<>();estoque.put("Maçã", 50);estoque.put("Banana", 30);estoque.put("Laranja", 20);System.out.println(estoque); // Impressão ordenada pelas chaves}}import java.util.Map; import java.util.TreeMap; public class TreeMapExample { public static void main(String[] args) { Map<String, Integer> estoque = new TreeMap<>(); estoque.put("Maçã", 50); estoque.put("Banana", 30); estoque.put("Laranja", 20); System.out.println(estoque); // Impressão ordenada pelas chaves } }import java.util.Map; import java.util.TreeMap; public class TreeMapExample { public static void main(String[] args) { Map<String, Integer> estoque = new TreeMap<>(); estoque.put("Maçã", 50); estoque.put("Banana", 30); estoque.put("Laranja", 20); System.out.println(estoque); // Impressão ordenada pelas chaves } }
Enter fullscreen mode Exit fullscreen mode
- Métodos Úteis com Lambdas 2.1. forEach() (Iteração simplificada)
estoque.forEach((fruta, quantidade) ->System.out.println(fruta + " tem " + quantidade + " unidades"));estoque.forEach((fruta, quantidade) -> System.out.println(fruta + " tem " + quantidade + " unidades") );estoque.forEach((fruta, quantidade) -> System.out.println(fruta + " tem " + quantidade + " unidades") );
Enter fullscreen mode Exit fullscreen mode
2.2. replaceAll() (Modifica todos os valores)
estoque.replaceAll((fruta, quantidade) -> quantidade * 2); // Dobra os valoresestoque.replaceAll((fruta, quantidade) -> quantidade * 2); // Dobra os valoresestoque.replaceAll((fruta, quantidade) -> quantidade * 2); // Dobra os valores
Enter fullscreen mode Exit fullscreen mode
2.3. computeIfPresent() (Modifica valores apenas se a chave existir)
estoque.computeIfPresent("Banana", (key, val) -> val + 10); // Soma 10 unidades à Bananaestoque.computeIfPresent("Banana", (key, val) -> val + 10); // Soma 10 unidades à Bananaestoque.computeIfPresent("Banana", (key, val) -> val + 10); // Soma 10 unidades à Banana
Enter fullscreen mode Exit fullscreen mode
Resumo das Diferenças
暂无评论内容