使用HashMap,HashSet等时覆盖hashCode?

时间:2015-05-29 07:20:54

标签: java hashcode

问题出在标题中。我使用HashMap如下:

Map<Player, Partner> m = new HashMap<Player, Partner>();
//do some on m

PlayerPartner只是表示数据模型的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
}

我想说这些类的两个对象是等效的 iff 它们具有相同的id。那么,我应该写hashCode类似

的内容
public int hashCode(){
    return id;
}

这是一种正确的方法吗?为什么我要在使用HashMap或类似的东西时使用它呢?

2 个答案:

答案 0 :(得分:8)

此类equals可行。您还必须以一致的方式覆盖@Override public boolean equals(Object other) { if (!(other instanceof Player)) return false; Player op = (Player) other; return id == op.id; }

gtk_entry_set_text (GTK_ENTRY (entry1), buffer);

答案 1 :(得分:1)

对象存储在散列桶中,比如说你有100个对象,如果100个中有50个返回哈希码值&#34; 123&#34;剩余的50个回报&#34; 124&#34;它们存储在不同的两个桶中,因此减少了所需的搜索时间。

搜索第一个目标是找到对象所属的存储桶,一旦找到存储桶然后调用equls方法找到对象

不是在一个地方stroing所有对象(搜索很困难),基于散列的集合将具有相同散列码值的对象组合在一起,每个这样的组都存储在称为散列桶的位置