2012-10-08 22 views
8

Tengo una clase de Color que estoy poniendo en el hashmap. Me gustaría llamar a containsKey en el mapa hash para asegurar si el objeto está ya presente en el HashMapllamando a containsKey en un hashmap con clase personalizada

clase Color

public class Color { 
    public String name; 
    Color (String name) {this.name = name;} 
    //getters setters for name 
} 

HashMap

HashMap<Color, List<String>> m = new HashMap<Color, List<String>>(); 
Color c = new Color("red"); 
m.put(c, new ArrayList<String>()); 
Color c1 = new Color("red"); 
System.out.println(m.containsKey(c1)); //I'd like to return this as true 

Desde c1 tiene name rojo. Me gustaría que el System.out devuelva verdadero porque la clave ya está presente en el mapa, c, tiene name rojo

¿Cómo se puede lograr esto?

Respuesta

13

Su clase personalizada Color debe anular equals() y hashcode() métodos para lograr lo que desea.

Cuando está utilizando objetos personalizados como claves para collections y le gustaría hacer de búsqueda usando el objeto, entonces usted debe reemplazar adecuadamente equals() y hashcode() métodos.

Lea también:

Overriding equals and hashCode in Java

Cuestiones relacionadas