问题是您提供了一个错误
equals:应该
equals(Object),而不是
equals(Car)。
本质上,您提供了一个 重载 而不是 override ,因此
HashMap始终
equals从基类中调用。
解决此问题的方法很简单:添加一个执行强制转换的覆盖,并调用
equals您编写的方法,如下所示:
@Overridepublic boolean equals(Object other) { return (other instanceof Car) && equals((Car)other);}注意注释的使用
@Override。它可以帮助Java帮助您自动发现此类问题。
注意:对于这个问题,请考虑
hashCode以更“节省”的方式实现您的方法。与其
(this.getCarName() +this.getCarModel())仅出于获取其哈希码的目的而创建丢弃字符串,还不如考虑如下重写该方法:
public int hashCode() { return 31*getCarName().hashCode() + getCarModel().hashCode();}或在Java 1.7+中,您可以编写
public int hashCode() { // Thanks, fge, for a nice improvement! return Objects.hash(carName, carModel);}


