Sabía usted que:¿Por qué AbstractCollection no implementa equals()?
Map<Object,Object> m1 = new HashMap<Object, Object>();
Map<Object,Object> m2 = new HashMap<Object, Object>();
System.out.println("m1.equals(m2) = "+m1.equals(m2));
System.out.println("m1.keySet().equals(m2.keySet()) = "
+m1.keySet().equals(m2.keySet()));
System.out.println("m1.entrySet().equals(m2.entrySet()) = "
+m1.entrySet().equals(m2.entrySet()));
System.out.println("m1.values().equals(m2.values()) = "
+m1.values().equals(m2.values()));
habría de salida:
m1.equals(m2) = true
m1.keySet().equals(m2.keySet()) = true
m1.entrySet().equals(m2.entrySet()) = true
m1.values().equals(m2.values()) = false
Esto es causado por el hecho de que AbstractCollection
(que hereda de HashMap$Values
) no anula #equals()
.
¿Tiene alguna idea de por qué es así?
Me gusta tu respuesta, has dicho algo similar a mí, pero de una mejor manera. Los valores no son un conjunto o una lista, pero se puede pensar como una bolsa. ¿Por qué no implementar equals() con semántica de bolsa? –
@Motlin: Acepto que nuestras respuestas son similares, lamentablemente respondimos unos segundos después.En cuanto a la semántica de bolsa, un conmutativo contiene la prueba All() desafortunadamente rompería los contratos de List.equals() y Set.equals() (ya que ellos mismos ya no serían conmutativos). –