[英]How to check whether two sets contain the same objects
我有一個 class 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
。 我在這里想念什么?
顧名思義, HashSet
要求您重寫hashCode
方法,該方法用於確定兩個對象是否可能相等。 這是一個可能的實現:
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + value;
return result;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.