我使用JavaHashSet存儲唯一元素,但現在我想檢索元素,但HashSet沒有類似的東西,這是我想要解決的問題:對于我的用例LinkInfohashCode()和equals()方法不使用LinkInfo.id字段,我想從set中獲取linkinfo實例并更新其所有字段,但id字段應該來自舊實例Set<LinkInfo> fooSet = new HashSet<>()public void updateFoo(LinkInfo linkInfo) { LinkInfo temp = fooSet.get(linkInfo); linkInfo.setId(temp.getId()); // now update set fooSet.remove(linkInfo) fooSet.add(linkInfo) }
3 回答

狐的傳說
TA貢獻1804條經驗 獲得超3個贊
而不是
LinkInfo temp = fooSet.get(linkInfo);
以下邏輯與您似乎想要的相同
if (fooSet.contains(linkInfo)) {
temp = linkInfo;
}

30秒到達戰場
TA貢獻1828條經驗 獲得超6個贊
您在這里有一個邏輯上的問題。為什么要依賴的APIequals()提供一種方法getElementEqualTo(e)?為了使用這種方法,您需要提供一個對象,該對象出于API的目的,等同于所需的結果。那有什么意義呢?
但這并不意味著您不走運。我想您是在說您的LinkInfo類提供了一些方法hashCode(),這些equals()方法適合通過可以獲取的另一個對象來標識所需的對象。在這種情況下,聽起來好像HashMap可以達到您的目的。只需將每個鍵映射到自身即可。
HashMap<LinkInfo, LinkInfo> infos;
public void updateInfo(LinkInfo linkInfo) {
LinkInfo temp = infos.remove(linkInfo);
if (temp != null) {
linkInfo.setId(temp.getId());
}
infos.put(linkInfo, linkInfo);
}
添加回答
舉報
0/150
提交
取消