Tengo dos juegos en Java que comparan objetos Item
. ¿Existe algún método para comparar los conjuntos de manera que se invoque el método Item
y no solo comparar referencias?Conjuntos de comparación profunda en Java
Respuesta
Cada hijo de AbstractSet
hace eso. Ver the docs
public boolean equals(Object o)
compara el objeto especificado con este conjunto por la igualdad. Devuelve verdadero si el objeto dado también es un conjunto, los dos conjuntos tienen el mismo tamaño, y cada miembro del conjunto dado está contenido en este conjunto. Esto asegura que el método equals funciona correctamente en diferentes implementaciones de la interfaz Set. Esta implementación primero verifica si el objeto especificado es este conjunto; si es así, devuelve verdadero. Luego, verifica si el objeto especificado es un conjunto cuyo tamaño es idéntico al tamaño de este conjunto; si no, devuelve falso. Si es así, devuelve containsAll ((Collection) o).
En realidad, esta se basa en la aplicación contains
(que se invoca por containsAll(..)
). Para HashSet
(al menos) esto es lo que está buscando.
Este es el comportamiento predeterminado, si no es lo que está viendo, entonces compruebe que está anulando hashCode también. Ver el siguiente código de ejemplo:
public static void main(String[] args) {
Set<Item> items1 = new HashSet<Item>();
items1.add(new Item("item 1"));
items1.add(new Item("item 2"));
Set<Item> items2 = new HashSet<Item>();
items2.add(new Item("item 1"));
items2.add(new Item("item 2"));
System.out.println(items1.equals(items2));
}
private static class Item {
private String id;
public Item(String id) {
this.id = id;
}
@Override
public int hashCode() {
return id.hashCode();
}
@Override
public boolean equals(Object obj) {
return id.equals(((Item)obj).id);
}
}
Este salidas:
verdaderos
- 1. TSQL comparación de dos conjuntos de
- 2. ¿Clonación profunda de matrices multidimensionales en Java ...?
- 3. Copia profunda duplicada() de ByteBuffer de Java
- 4. Comparación de conjuntos de datos 2D/diagramas de dispersión
- 5. Comparación de HashMaps en Java
- 6. Comparación de cadenas en Java
- 7. Conjuntos asociativos y Java
- 8. Comparación de matrices Java
- 9. Producto cartesiano de conjuntos arbitrarios en Java
- 10. ¿Se desborda la pila de recursión profunda en Java?
- 11. Cómo hacer una copia profunda de un InputStream en Java
- 12. (Profunda) comparación de un objeto con una referencia en pruebas unitarias (C#)
- 13. Comparación de tipos de clase en Java
- 14. Java comparación Unicode
- 15. copia profunda en C#
- 16. Copia profunda en JPA
- 17. Java: evite buscar null en clases anidadas (comprobación nula profunda)
- 18. Clonación profunda en Actionscript
- 19. Java comparación doble epsilon
- 20. Comprobación de profunda igualdad en JUnit tests
- 21. Comparación de fechas utilizando Java
- 22. Patrón de Java Builder y una jerarquía de objetos "profunda"
- 23. Comparación de dos colecciones en Java
- 24. Comparación de BigDecimal e int en Java
- 25. ¿Cómo puedo hacer una "comparación profunda" o "diff" en dos Structs?
- 26. Copia de estructura profunda
- 27. cadena para la comparación en Java
- 28. Java: diferentes dobles y dobles en comparación
- 29. Demostración de comparación de cadenas con Java
- 30. Java vs. Comparación de velocidad de PHP
, gracias @MrWiggles. La anulación de hashCode resolvió mi problema (anulando uno de hashCode e iguales no funcionó). – user495285