标签:
package com.hash; import java.util.HashMap; public class Apple { private String color; public Apple(String color) { this.color = color; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((color == null) ? 0 : color.hashCode()); return result; } public boolean equals(Object obj) { if (!(obj instanceof Apple)) return false; if (obj == this) return true; return this.color == ((Apple) obj).color; } public static void main(String[] args) { Apple a1 = new Apple("green"); Apple a2 = new Apple("red"); //hashMap stores apple type and its quantity HashMap<Apple, Integer> m = new HashMap<Apple, Integer>(); m.put(a1, 10); m.put(a2, 20); System.out.println(m.get(new Apple("green"))); } }
从上文代码不难看出,HashMap已保存一个"green"的Apple对象,但是,,在执行时,会发生一个问题,,,用map获取"Apple"对象时,并未找到。
然而,为什么会造成这问题呢,,,这就是本文主旨所在。
public int hashCode(){ // 此种实现,要求 color值定以后就不得修改 // 否则同一个物理对象,前后有两个不同的hashCode,逻辑上就是错的。 return this.color.length(); }
参考地址:http://www.acfun.tv/a/ac1876770
标签:
原文地址:http://www.cnblogs.com/james-roger/p/5916078.html