2012-10-08 34 views
8

Tôi có một lớp Màu mà tôi đang đưa vào băm. Tôi muốn gọi containsKey trên hashmap để đảm bảo cho dù đối tượng đã có mặt trong hashmapgọi containsKey trên một hashmap với lớp tùy chỉnh

lớp Màu

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 

Kể từ c1name đỏ. Tôi muốn số System.out trả về true vì khóa đã có trong bản đồ, c, có name đỏ

Làm cách nào để đạt được điều này?

Trả lời

13

Lớp tùy chỉnh của bạn Color phải ghi đè các phương thức equals()hashcode() để đạt được những gì bạn muốn.

Khi bạn đang sử dụng đối tượng tùy chỉnh như là chìa khóa cho collections và muốn làm tra cứu sử dụng đối tượng, sau đó bạn đúng cách nên ghi đè equals()hashcode() phương pháp.

Cũng đọc:

Overriding equals and hashCode in Java

Các vấn đề liên quan