假设我们通过对凤凰新闻日志的清理获取到一亿条新闻的URL地址,现在需要统计出一亿条新闻URL中最热门的五十条新闻URL(这些新闻URL重复度比较高,虽然总数是一亿,如果去重之后,大约有三千万条新闻URL,URL去重过程不需要考虑,一条新闻URL的重复度越高,说明阅读该新闻的用户越多,也就是越热门,每条新闻URL长度限制不超过255字节),要求使用的内存不超过8G,请写出基本思路与步骤。(该题不计入试卷得分,有时间则完成)
//伪代码
String url;
HashMap<String, Integer> map = new HashMap<String, Integer>();
while (fileStream.hasNext()){
url = read();
if (map.containsKey(url)){
map.get(url)++;
}else{
map.put(url, 1);
}
}
PriorityQueue<Map.Entry<String, Integer>> queue =
new PriorityQueue<Map.Entry<String, Integer>>(50,
new Comparator<Map.Entry<String, Integer>>(){
@Override public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
return o1.getValue() - o2.getValue();
}
});
int k = 50;
for (Map.Entry<String, Integer> entry : map.entrySet()){
if (queue.size() < k){
queue.add(entry);
} else {
if (entry.getValue() > queue.peek().getValue()){
queue.poll();
queue.add(entry);
}
}
}