2012-10-08 6 views
8

Ho una classe di colori che inserisco nell'hashmap. Mi piacerebbe chiamare containsKey sul HashMap per garantire se l'oggetto è già presente nel hashmapcalling containsKey su una hashmap con classe personalizzata

classe 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 

Dal c1 ha name rosso. Mi piacerebbe che lo System.out restituisse true perché la chiave già presente nella mappa, c, ha name rosso

Come può essere ottenuto?

risposta

13

La classe personalizzata Color deve sostituire i metodi equals() e hashcode() per ottenere ciò che si desidera.

Quando si utilizza oggetti personalizzati come chiavi per collections e vorrebbe fare ricerca utilizzando oggetto, allora si dovrebbe ignorare correttamente equals() e hashcode() metodi.

Leggere anche:

Overriding equals and hashCode in Java

Problemi correlati