class UserScoring implements Comparable<UserScoring> {
User user;
int score;
UserScoring(User user, int score) {
this.user = user;
this.score = score;
}
@Override
public int compareTo(UserScoring o) {
if (this.score < o.score) {
return 1;
}
else if (this.score == o.score) {
return 0;
}
return -1;
}
@Override
public int hashCode() {
return user.hashCode();
}
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final UserScoring other = (UserScoring) obj;
return user.equals(other.user);
}
}
我想創建一個類UserScoring
可它的可變分數的基礎上進行排序,其獨特性是由其用戶決定返回變量的哈希碼。重寫hashCode方法在類
這意味着:
- 如果我有點UserScoring對象的使用Collections.sort()的集合,我想基於從高到低的順序分數進行排序。我已經爲同樣的方法重寫了compareTo方法。
- 如果我創建一組UserScoring對象,則不需要同一用戶的兩個UserScoring對象。我已經覆蓋了相同的equals和hashcode方法。
我在這裏有兩個疑問: 1.返回UserScoring對象的散列碼與User對象相同是否是錯誤的。這對我來說肯定是錯誤的。但是它可能導致什麼問題呢?
有什麼辦法可以確保只有高分的UserScoring對象保存在集合中(並且分數較小的對象被驅逐或未添加)每當試圖添加同一用戶的兩個UserScoring對象時。
UserScoring us1 = new UserScoring(u1, 1000); UserScoring us2 = new UserScoring(u1, 100); Set<UserScoring> set = new HashSet<>(); set.add(us1); set.add(us2);
這套如何可以包含US1代替US2?
的hashCode和equals的實現必須相互匹配。你的不。 –
@OliverCharlesworth從何而來,他們必須匹配?我能在這裏做什麼,所以他們匹配? – tanvi
@OliverCharlesworth我明白這個實現是錯誤的,因爲對於兩個不同分數的UserScoring對象,這意味着它們是平等的,它不應該。但是我想把這些對象放在一個集合中,以便一個用戶只有一個對象。有沒有辦法做到這一點? – tanvi