Estou aprendendo sobre HashMaps em Java e estou confuso sobre a ordem de iteração. A documentação afirma que HashMap não garante nenhuma ordem de iteração específica, mas no meu teste simples, a ordem parece permanecer consistente:
Esta classe não garante a ordem do mapa; em particular, não garante que a ordem permanecerá constante ao longo do tempo. Documentação Java 11
import java.util.HashMap;
public class HashMapDemo {
public static void main(String[] args) {
HashMap<String, String> dishes = new HashMap<>();
// Adding more elements with complex keys
dishes.put("dish-1234", "Pho");
dishes.put("dish-5678", "Spicy Beef Noodle Soup");
dishes.put("dish-9012", "Broken Rice");
dishes.put("dish-3456", "Banh Mi");
dishes.put("dish-7890", "Hu Tieu");
dishes.put("dish-2345", "Mi Quang");
dishes.put("dish-6789", "Crab Noodle Soup");
dishes.put("dish-0123", "Rolled Rice Cake");
System.out.println("First time:");
dishes.forEach((id, name) -> System.out.println(id + ": " + name));
// Create new HashMap with same data
HashMap<String, String> dishes2 = new HashMap<>();
dishes2.putAll(dishes);
System.out.println("\nSecond time (New HashMap):");
dishes2.forEach((id, name) -> System.out.println(id + ": " + name));
}
}
Saída:
First time:
dish-7890: Hu Tieu
dish-3456: Banh Mi
dish-2345: Mi Quang
dish-1234: Pho
dish-0123: Rolled Rice Cake
dish-5678: Spicy Beef Noodle Soup
dish-9012: Broken Rice
dish-6789: Crab Noodle Soup
Second time (New HashMap):
dish-7890: Hu Tieu
dish-3456: Banh Mi
dish-2345: Mi Quang
dish-1234: Pho
dish-0123: Rolled Rice Cake
dish-5678: Spicy Beef Noodle Soup
dish-9012: Broken Rice
dish-6789: Crab Noodle Soup
Entendo que se eu precisar de ordem garantida, devo usar LinkedHashMap ou TreeMap, mas estou tentando entender o comportamento real do HashMap. Li alguma documentação falando sobre redimensionamento e re-hash, talvez seja muito difícil de entender para mim.
Também li alguns posts falando desse problema, mas não consigo reproduzir
- Por que o HashMap não garante que a ordem do mapa permanecerá constante ao longo do tempo
- Causa da diferença na ordem de inserção de HashMap e LinkedHashMap
Como posso entender isso?