有一个1G大小的一个文件,里面每一行是一个词,返回频数最高的100个词,java 实现
时间: 2023-06-08 16:03:56 浏览: 114
好的,我可以帮你解决这个问题。
首先,你需要创建一个哈希表(HashMap)来存储每个单词的出现次数。然后,你需要遍历每一行,将每个单词作为键存储在哈希表中,如果这个单词已经存在于哈希表中,则将它出现的次数加1。最后,你需要对哈希表按照出现次数进行排序,并返回前100个出现频率最高的单词。
以下是这个算法的Java实现代码:
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map.Entry;
public class WordFrequency {
public static void main(String[] args) throws Exception {
HashMap<String, Integer> wordCount = new HashMap<String, Integer>();
BufferedReader br = new BufferedReader(new FileReader("yourfile.txt"));
String line = br.readLine();
while (line != null) {
String[] words = line.split("\\s+");
for (String word : words) {
if (wordCount.containsKey(word)) {
wordCount.put(word, wordCount.get(word) + 1);
} else {
wordCount.put(word, 1);
}
}
line = br.readLine();
}
br.close();
List<Entry<String, Integer>> sortedList = new ArrayList<Entry<String, Integer>>(wordCount.entrySet());
Collections.sort(sortedList, new Comparator<Entry<String, Integer>>() {
public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
for (int i = 0; i < 100 && i < sortedList.size(); i++) {
Entry<String, Integer> e = sortedList.get(i);
System.out.println(e.getKey() + " : " + e.getValue());
}
}
}
请注意,这个程序假设你的文件中每个单词都以空格分隔。如果不是这样,你需要相应地修改代码。
阅读全文