Cómo comparar dos Maps en Java

El HashMap es una estructura de datos popular en Java para almacenar pares clave-valor. Cuando trabaje con múltiples HashMaps, es posible que deba compararlos para verificar la igualdad o las diferencias. Hay varias formas de comparar dos HashMaps en Java, pero algunas formas comunes incluyen el uso del método equals() y usando la Stream API de Java 8.

El método equals() se usa para comparar pares clave-valor entre dos HashMaps, mientras que la Stream API proporciona una manera de comparar las claves o los valores de dos HashMaps. Dependiendo de su caso de uso, puede elegir un método u otro o usar una combinación de ambos. En este artículo exploraremos estos métodos en detalle.

Comparar dos Maps usando el método equals()

La forma mas directa de comparar dos Maps es utilizando el método equals() heredado de la clase java.util.AbstractMap. En Java, se usa el método equals() para comparar pares clave-valor entre dos HashMaps. Por lo tanto, dos HashMaps se consideran iguales si tienen las mismas entradas, independientemente de su orden. Tenga en cuenta que el método equals() compara los valores en HashMap utilizando el método equals() de los objetos clave y de valor correspondientes.

import java.util.HashMap;
import java.util.Map;

public class CompararMapsEjemplo1 {
	public static void main(String[] args) {
		Map<Integer, String> colormap1 = new HashMap<Integer, String>();
		colormap1.put(1, "blanco");
		colormap1.put(2, "amarillo");
		colormap1.put(3, "verde");
		colormap1.put(4, "azul");
		
		Map<Integer, String> colormap2 = new HashMap<Integer, String>();
		colormap2.put(2, "amarillo");
		colormap2.put(1, "blanco");
		colormap2.put(4, "azul");
		colormap2.put(3, "verde");

		System.out.println("-> " + colormap1.equals(colormap2));
	}
}

Salida:

-> true

El método equals(Object o) en primer lugar verifica si el objeto que recibe es el mismo sobre el que se invoca (this); si es una referencia al mismo objeto retorna true. A continuación se verifica si el objeto que recibe es un Map y si tiene la misma cantidad de entradas; caso contrario retorna false. Luego verifica que las entradas del Map recibido coinciden con las de este Map.

Comparar dos maps en Java mediante el método equals(Object o) es equivalente a:

colormap1.entrySet().equals(colormap2.entrySet());

Comparar dos Maps usando Stream API

Utilizando Stream API se puede verificar si el segundo Map al menos contiene todas las entradas del primero:

import java.util.HashMap;
import java.util.Map;

public class CompararMapsEjemplo2 {

	public static void main(String[] args) {

		Map<Integer, String> colormap1 = new HashMap<Integer, String>();
		colormap1.put(1, "blanco");
		colormap1.put(2, "amarillo");
		colormap1.put(3, "verde");
		colormap1.put(4, "azul");
		
		Map<Integer, String> colormap2 = new HashMap<Integer, String>();
		colormap2.put(2, "amarillo");
		colormap2.put(1, "blanco");
		colormap2.put(4, "azul");
		colormap2.put(3, "verde");
		colormap2.put(5, "rojo");
		
		boolean b = colormap1.entrySet().stream().allMatch(e ->  e.getValue().equals(colormap2.get(e.getKey())));
		
		System.out.println("-> " + b);
	}
}

Salida:

-> true

También se puede utilizar Stream API para verificar si el segundo Map contiene al menos una de las entradas del primero:

import java.util.HashMap;
import java.util.Map;

public class CompararMapsEjemplo3 {

	public static void main(String[] args) {
		Map<Integer, String> colormap1 = new HashMap<Integer, String>();
		colormap1.put(1, "blanco");
		colormap1.put(2, "amarillo");
		colormap1.put(3, "verde");
		colormap1.put(4, "azul");
		
		Map<Integer, String> colormap2 = new HashMap<Integer, String>();
		colormap2.put(2, "cian");
		colormap2.put(1, "gris");
		colormap2.put(4, "purpura");
		colormap2.put(3, "verde");
		
		boolean b = colormap1.entrySet().stream().anyMatch(e ->  e.getValue().equals(colormap2.get(e.getKey())));
		
		System.out.println("-> " + b);
	}
}

Salida:

-> true

Conclusión

La comparación de dos hashmaps en Java se puede hacer de diferentes maneras, como usar el método equals() o la Stream API de Java 8. El método equals() compara los hashmaps en función de pares clave-valor, mientras que Stream API proporciona una forma más flexible y expresiva de procesar los hashmaps al permitir operaciones complejas de filtrado, mapeo y agrupación. El enfoque a utilizar dependerá de los requisitos específicos de su caso de uso. Independientemente del enfoque, es importante tener en cuenta los impactos potenciales en el rendimiento de comparar hashmaps grandes, así como las implicaciones de los tipos de clave y valor específicos utilizados en los hashmaps.


Te puede interesar:

Cómo iterar un Map en Java

En este artículo explicamos diferentes formas de iterar a través de los ítems de un map en diferentes versiones de Java.

Seguir leyendo →

Cómo inicializar un Map en Java

En este artículo se explican diferentes formas de inicializar un java.util.Map en diferentes versiones de Java,

Seguir leyendo →

Palabras reservadas en Java

Las palabras reservadas en Java son un componente crucial de la sintaxis del lenguaje para formar los bloques básicos del lenguaje.

Seguir leyendo →