【问题标题】:How to check whether two sets contain the same objects如何检查两个集合是否包含相同的对象
【发布时间】:2020-07-27 14:35:25
【问题描述】:

我有一堂课IntegerType:

public class IntegerType implements DataType {

    private int value;

    public IntegerType(int value) {
        this.value = value;
    }

    @Override
    public NativeType nativeType() {
        return NativeType.INTEGER;
    }

    @Override
    public int size() {
        return Integer.BYTES;
    }

    @Override
    public Integer value() {
        return this.value;
    }

    @Override
    public boolean equals(Object o) {
        boolean result = false;
        if (o == null || o.getClass() != getClass()) {
            result = false;
        } else {
            IntegerType integerType = (IntegerType) o;
            if (this.value == integerType.value()) {
                result = true;
            }
        }
        return result;
    }
}

我本质上想根据实例是否具有相同的.value 参数来检查包含IntegerType 实例的两个集合是否相同:

IntegerType int1 = new IntegerType(1);
IntegerType int2= new IntegerType(1);
Set<IntegerType> set1 = new HashSet<>();
set1.add(int1);
Set<IntegerType> set2 = new HashSet<>();
set2.add(int2);

System.out.println(set1.equals(set2));

但是运行上面的代码会打印出false。据我了解,它应该打印true,因为int1.equals(int2)true。我在这里错过了什么?

【问题讨论】:

    标签: java


    【解决方案1】:

    顾名思义,HashSet 要求您覆盖 hashCode 方法,它用于确定两个对象是否可能相等。这是一个可能的实现:

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

    Demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-07
      相关资源
      最近更新 更多