gpt4 book ai didi

java - 匿名覆盖 HashSet hashCode

转载 作者:搜寻专家 更新时间:2023-11-01 08:13:17 24 4
gpt4 key购买 nike

我正在尝试使用 HashSetApplicationInfo 列表中删除重复项对象,我正在尝试使用比良好的旧循环和比较更高级的方法来完成此操作。

我最近一直在学习 Java 中的匿名功能,我想在这里应用它,但我被卡住了。据我了解,equals()只需使用 hashCode()确定相等性的方法以及从我可以收集到的信息,我只需要覆盖 hashCode()方法。

ApplicationInfo内object 是一个名为 packageName 的字段,一个字符串,这是我想要 HashSet 的唯一字段比较并排除任何重复项。

由于我是 Java 的新手,如果我理解正确,我希望得到一些帮助,以及如何做到这一点。我意识到我可以扩展 HashSet并这样做,但我想尝试这个匿名交易,这样我就可以学到一些东西。

如果我有一个包含 ApplicationInfo 对象的 HashSet,我该如何根据 packageName 字段返回一个 hashCode?

//Help me fix the below idea please
HashSet<ApplicationInfo> hs = new HashSet<ApplicationInfo>() {
@Override
public int hashCode() {
// How do I do this sort of thing
return this.packageName.hashCode();
}
};

最佳答案

不幸的是HashSet不允许您使用自定义相等/哈希比较。您的尝试覆盖了 hashCode 集合而不是集合中的每个项目

如果包名始终是一个适当的相等指示符,您可以覆盖 hashCodeequalsApplicationInfo本身。否则,我认为你最好的选择可能是创建一个 HashMap<String, ApplicationInfo>将名称映射到包。假设对于特定名称最终得到哪个包并不重要,您可以循环:

Map<String, ApplicationInfo> nameMap = new HashMap<String, ApplicationInfo>();
for (ApplicationInfo pkg : packages) {
nameMap.put(pkg.packageName, pkg);
}

关于java - 匿名覆盖 HashSet hashCode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7460033/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com