public class HashCodeEqual {
public static void main(String[] args) {
Apple a1 = new Apple(“Blue”);
Apple a2 = new Apple(“Green”);
HashMap<Apple, Integer> map = new HashMap<>();
map.put(a1, 10);
map.put(a2, 20);
System.out.println(map.get(new Apple("Green")));
}
}
class Apple {
public String color;
public Apple(String color) {
this.color = color;
}
@Override
public boolean equals(Object obj) {
if(! (obj instanceof Apple))
return false;
if(obj == this)
return true;
return this.color.equals(((Apple)obj).color);
}
// public int hashCode(){
// return this.color.length();
// }
}
HashMap取key的时候,会拿所取的key跟map里的key做比较,先看hashcode是不是相同的,若hashcode相同再比较equals是否相同,相同的话就得到对应的value。Object默认所有的对象的hashCode值都不一样。所以上面的例子输出为NULL,我们需要重写hashCode。
参考博客:https://www.jianshu.com/p/6d2645be55c1