在ArrayList中获得更高的重复次数

时间:2013-05-25 05:27:08

标签: java oop arraylist

我有以下结构:

ArrayList<ArrayList<Movies>>

电影有重复,我需要获得具有更高重复次数的n部电影。我一直在努力思考这个问题,但我无法提供任何优雅的解决方案。

3 个答案:

答案 0 :(得分: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,以实现此目的

答案 1 :(得分:1)

你可以利用

   Map<Movie,Integer> 

保持

<movie,frequency>

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

答案 2 :(得分: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 sort by value对树图进行排序,或者您只需创建一个自定义类,即电影和计数器,并将其放入带有自定义比较器的列表中。