问题在标题中。我使用HashMap
如下:
Map<Player, Partner> m = new HashMap<Player, Partner>();
//do some on m
其中Player
和Partner
都是代表数据模型的POJO
。
public class Player{
private int id;
private String name;
//etc, GET, SET
}
public class Partner{
private int id;
private String name;
//etc, GET, SET
}
我想说这些类的两个对象是等价的如果它们具有相同的id
。那么,我应该把hashCode
写成
public int hashCode(){
return id;
}
这是一个正确的方式去做,为什么我要使用它当我要使用HashMap或类似的东西?
这样的hashCode
就可以了。您还必须以一致的方式重写equals
:
@Override
public boolean equals(Object other)
{
if (!(other instanceof Player))
return false;
Player op = (Player) other;
return id == op.id;
}
对象存储在哈希桶中,假设您有100个对象,如果100个对象中有50个返回哈希码值"123",其余50个返回"124",它们存储在不同的两个桶中,从而减少了所需的搜索时间。
搜索的第一个目标是找到对象所属的桶,一旦找到桶就调用equals方法来查找对象
基于散列的集合不是将所有对象存储在一个地方(搜索很困难),而是将具有相同散列码值的对象分组在一起,每个这样的组存储在一个称为散列桶的地方