【问题标题】:Java Overriding equals and hashCode with Generics [duplicate]Java用泛型覆盖equals和hashCode [重复]
【发布时间】:2014-07-11 00:27:48
【问题描述】:

在一个 java 类中,我有以下代码:

private class Couple<V extends Comparable<V>>{

    private V v1;
    private V v2;

    public Couple(V v1, V v2){
        this.v1 = v1;
        this.v2 = v2;
    }
}

我使用 HashMap,并且我想使用 Couple 类型的键。例如,如果我想在 HashMap 中插入一个新元素,我会执行以下操作:

HashMap<Couple<V>, Integer> map = new HashMap<Couple<V>, Integer>();
map.put(new Couple<V>(v1, v2), new Integer(10));

我应该如何使用泛型覆盖 Couple 类中的 equals 和 hashCode 方法?

【问题讨论】:

    标签: java generics hashmap


    【解决方案1】:

    Couple 的示例 equals() 实现可能如下:

    @Override
    public boolean equals(Object obj) {
       if (!(obj instanceof Couple))
            return false;
        if (obj == this)
            return true;
    
        Couple couple = (Couple) obj;    
        return (this.v1 != null && this.v1.equals(couple.v1) 
                && this.v2 != null && this.v2.equals(couple.v2));
    }
    

    还有 hashcode() 例子:

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((v1 == null) ? 0 : v1.hashCode());
        result = prime * result + ((v2 == null) ? 0 : v2.hashCode());
        return result;
    }
    

    【讨论】:

    • 太好了,如果我还需要重写 hashCode() 方法,我该怎么办?
    • @MarcoMicheli 也添加了它。
    • 太棒了,它可以正常工作。谢谢!
    • 如果 this.v1this.v2 在您的 equals 方法中为空怎么办?
    • @sbat 感谢指正!
    猜你喜欢
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多