我使用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 回答
![?](http://img1.sycdn.imooc.com/545863cd0001b72a02200220-100-100.jpg)
狐的传说
TA贡献1804条经验 获得超3个赞
而不是
LinkInfo temp = fooSet.get(linkInfo);
以下逻辑与您似乎想要的相同
if (fooSet.contains(linkInfo)) {
temp = linkInfo;
}
![?](http://img1.sycdn.imooc.com/54584cd10001404b02200220-100-100.jpg)
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
提交
取消