对于Key这个类,这里需要重载boolean equals(Object o) 和int hashCode() 两个函数。这两个函数必须都要重载,否则会导致key找到不到。这里要说为什么,估计是HashMap中使用key相等的策略是 if(key1.equals(key2) && key1.hashCode() == key2.hashCode()), 因为hashcode可能会有多个不同的实例对应于一个hashCode, 所以这个东东会重叠。对于判断两个对象是否相等,java默认使用的是引用相等,即a == b。但是对于String等其他内置的类来说,他们有自己的重载equals()方法。另外java doc中也提到,当重载equals()方法时,最好把hashCode()方法也重载掉。这样看来if(key1.equals(key2) && key1.hashCode() == key2.hashCode())这句应该变为: