0

我有以下结构:

ArrayList<ArrayList<Movies>>

而且电影有重复,我需要获得重复次数较多的 n 部电影。我一直在努力思考这个问题,但我想不出任何优雅的解决方案。

4

3 回答 3

2

将其更改为以下

HashMap<Movie, Integer> map = new HashMap<Movie, Integer>();

// ArrayList<ArrayList<Movies>> listOfList = ...initialized

for (ArrayList<Movie> list : listOfList)
{
   for (Movie movie : list)
   {
      if (map.containsKey(movie))
      {
         int count = map.get(movie);
         map.put(movie, (count+1));
      }
      else
      {
         map.put(movie, 1);
      }
   }
}

确保您已正确实施hashcodeequals使其正常工作

于 2013-05-25T05:36:38.140 回答
1

这是使用地图的好时机。键是电影,值是整数。之后,您可以创建一个新的 TreeMap 来获取排序后的值。

ArrayList<ArrayList<Movies>> myMovieList;
Map<Movie,Integer> map = new HashMap<Movie,Integer>();
for (List<Movie> movies : myMovieList) {
    for (Movie movie: movies){
        Integer count = map.get(movie);
        if (count == null){
            map.put(movie,1);
        } else {
            map.put(movie, count+1);
        }
    }
}

最后,您将获得一个电影列表,现在您可以按值排序。请参阅按值排序树图,按值排序 TreeMap,或者您可以创建一个自定义类,它是一个电影和计数器,并将其放入具有自定义比较器的列表中。

于 2013-05-25T05:41:01.407 回答
1

你可以利用

   Map<Movie,Integer> 

保持

<movie,frequency>

您可以在 Map 中搜索,甚至可以使用基于频率排序的 TreeMap,您可以直接从中获取前 N 个元素。

于 2013-05-25T05:29:24.587 回答