【问题标题】:How to generate a hashcode from object with two list containing the same type of objects如何从具有包含相同类型对象的两个列表的对象生成哈希码
【发布时间】:2015-06-10 17:28:01
【问题描述】:

假设我有一个类(equal方法也存在):

public class SomeClassA {
    private int a;
    private int b;

        @Override
 public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + a;
    result = prime * result + b;
    return result;
 }
}

还有一个班级:

public class SomeClassB {
  List<SomeClassA> firstList;
  List<SomeClassA> secondList;

如果两个对象在 firstList 中具有相同的对象,在 secondList 中具有相同的对象,我如何构造哈希码以便将它们视为相等。

//汉克

【问题讨论】:

    标签: java list hashcode


    【解决方案1】:
     public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + firstList.hashCode();
        result = prime * result + secondList.hashCode();
        return result;
     }
    

    【讨论】:

    • 如果我切换两个列表中的对象,这种方法会返回相同的值吗?我不想那样。
    • 这取决于你说“如果它们在 firstList 中具有相同的对象而在 secondList 中具有相同的对象”时的意思,如果不同顺序的相同元素意味着不相等,那就对了。如果不只是在哈希码计算之前将列表转换为 Set
    • List(1, 2, 3).equals(List(3, 2, 1)) 将返回 false(以及不同的哈希码)。 Set(1, 2, 3).equals(Set(3, 2, 1)) 将返回 true(和相同的哈希码)
    • 你重写了equals方法吗?只是发布它,我会说我的哈希码是否正确。不要忘记如果你已经覆盖了哈希码,你应该覆盖equals,反之亦然
    • 是的!我有。猜猜我必须实现一个集合:/
    猜你喜欢
    • 1970-01-01
    • 2013-04-30
    • 2017-04-05
    • 2012-06-27
    • 2013-03-26
    • 2011-07-23
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    相关资源
    最近更新 更多