我有以下结构:
ArrayList<ArrayList<Movies>>
电影有重复,我需要获得具有更高重复次数的n部电影。我一直在努力思考这个问题,但我无法提供任何优雅的解决方案。
答案 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);
}
}
}
确保您正确实施hashcode
和equals
,以实现此目的
答案 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对树图进行排序,或者您只需创建一个自定义类,即电影和计数器,并将其放入带有自定义比较器的列表中。