java - 哈希集没有它应该有的值。实例化问题
问题描述
嘿,我想我有一些逻辑问题,但我真的看不出它在哪里。我知道问题出在 HashSet 之间,但就是这样。
我正在使用 HashMap,键是 numberOfEpisode,值是 HashSet。因此,如果我的数组列表中的这些动画具有相同数量的情节,例如 12,则将它们添加到新的 HashSet 中,然后添加到 HashMap 中。
代码
HashSet<Strings> animeNames;
for(Anime anime : animius.getListOfAnime){
animeNames = new HashSet<>();
for(Anime anime2 : animius.getListOfAnime){
for(Episode episode : anime.getListOEpisode){
for(Episode episode2 : anime2.getListOfEpisode{
if(episode.getNumber == episode2.getNumber){
animeNames.add(anime.getName);
animius.getEpisodeAndAnimeIndex.put(episode.getNumber, animeNames)
}
}
}
}
}
输出
格式化后。假设只有动漫1 与动漫 2 有相似之处,但动漫 2 有 2 个键,一个有 12 集,另一个有 24 集。
12 ---- 日本动漫1, 日本动漫2 <--- 这是正确的
24 ----anime1,anime2 <---这是错误的
预期产出
12----动漫1,动漫2
24----动漫2
尝试的解决方案
我创建了 2 个 HashSet,其中一个包含anime.getName 的值,另一个包含anime2.getName。
我还尝试在 for each 循环中以不同的方式放置animeNames 和animeNames2 的新实例
解决方案
如果我没有误解你,你不需要有 4 个嵌套的 for 循环。您只想检查您收藏中的每个动漫它们有多少集并将其存储。基本上按集数将动漫组合在一起。下面的代码就是这样做的。
HashMap<Integer, Set<Anime>> animeMap = new HashMap<>();
for(Anime anime : animius.getListOfAnime){
int numberOfEpisodes = anime.getListOEpisodes().size();
if (animeMap.contains(numberOfEpisodes) {
animeMap.get(numberOfEpisodes).add(anime);
} else {
HashSet<Anime> animeNames = new HashSet<>();
animeNames.add(anime);
animeMap.put(numberOfEpisodes, animeNames);
}
}
推荐阅读
- python-3.x - Spyder(使用 Anaconda):启动内核时发生错误
- python - 多输出堆叠回归器
- python - 如何使用数组作为“基数”和数据帧行作为“指数”来计算幂?
- php - 如何使用 php 下载多个 PDF 文件
- firebase - Cloud Firestore REST API 权限被拒绝
- javascript - 谁能解释一下雄辩的javascript中的以下功能
- java - 谷歌活动识别意图服务在某些设备上不起作用
- android - 在 Android 上配置 OkHttp 以信任“AndroidCAStore”中的内容以及显式证书
- angular-cli - 在 Angular 项目中运行 npm install 时,安装了 angular cli
- regex - 为数学表达式选择列