哈希集没有应具有的值。实例化问题

时间:2019-12-06 08:47:23

标签: java collections java-8 hashmap hashset

嘿,我认为我有一些逻辑问题,但我仍然无法真正看到问题所在。 我知道问题出在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 ---- anime1,anime2 <---这是正确的

24 ---- anime1,anime2 <---这是错误的

预期产量

12 ---- anime1,anime2

24 ---- anime2

尝试的解决方案

我创建了2个HashSet,其中一个包含anime.getName的值,另一个包含anime2.getName。

我还尝试了在每个循环中将不同的animeNames和animeNames2的新实例化

1 个答案:

答案 0 :(得分:1)

如果我没有误会你,则不需要嵌套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);
    }

}