为了账号安全,请及时绑定邮箱和手机立即绑定

什么是具有独特元素(如set)和get element功能的正确Java集合

什么是具有独特元素(如set)和get element功能的正确Java集合

qq_遁去的一_1 2021-04-03 15:11:34
我使用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;

}


查看完整回答
反对 回复 2021-04-18
?
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);


查看完整回答
反对 回复 2021-04-18
  • 3 回答
  • 0 关注
  • 167 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信