java 1.7新规_Java 1.7的hashCode()重写不符合我的预期

我有一个我重写了hashCode方法和equals方法的类。equals方法的行为符合我的预期,但是hashCode方法的行为似乎不符合我的预期。因此,我假设我的期望是不正确的,但不确定原因。下面是重写的方法:

public class Car extends SomeBaseClass implements Cloneable, Serializable {

private static final long serialVersionUID = 1L;

private String id;

private String name;

private String carName;

private String carModel;

private String displayTextCar;

public boolean equals(Car car)

{

return (getCarName().equals(car.getCarName()) && getCarModel().equals(car.getCarModel()));

}

public int hashCode()

{

return (this.getCarName() + this.getCarModel()).hashCode();

}

现在,我有一个测试类,其中创建两个car对象,并调用equals方法,然后将car的每个实例放入HashMap中。我将每个实例设置为具有相同的汽车名称和模型,并调用equals方法实际上返回true。但是,即使每个实例返回相同的hashCode,当我将它们添加到HashMap时,它仍将两个对象保留在Map中,而我希望第二个放置项可以替换地图中的第一个对象。以下是测试课程的内容:

HashMap testMap;

Car testCar1 = new Car();

testCar1.setCarName("DaveCar");

testCar1.setCarModel("DaveModelTest");

System.out.println("Car Hash 1: " + testCar1.hashCode());

Car testCar2 = new Car();

testCar2.setCarName("DaveCar");

testCar2.setCarModel("DaveModelTest");

System.out.println("Car Hash 2: " + testCar2.hashCode());

//hashCodes prints identical numbers

System.out.println("Car 1 equal Car 2 ?? " + testCar1.equals(testCar2));

//returns true

testMap.put(testCar1, "3");

testMap.put(testCar2, "16");

System.out.println("Map size is " + testMap.size());

//I would expect the size to be 1 here, but it's in fact 2.

所以这对我来说似乎不正确,我自然在这里省略了一些代码,但这是基本原理。希望有人可以指出我在这里出了问题。请注意,我确实使用Eclipse生成了hashCode和equals方法,并且可以正常工作,但是令我感到困惑的是,即使两个对象似乎为hashCode返回了相同的值,我的hashCode的实现也没有按我的预期工作。感谢任何人的输入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值