Java 字频计数器,列表工作不正常
我有一些代码可以计算给定单词数组列表中的单词频率。我有一个frequency类,它主要存储单词及其各自的频率。这是我的密码:Java 字频计数器,列表工作不正常,java,arrays,list,arraylist,frequency,Java,Arrays,List,Arraylist,Frequency,我有一些代码可以计算给定单词数组列表中的单词频率。我有一个frequency类,它主要存储单词及其各自的频率。这是我的密码: public static List<Frequency> computeWordFrequencies(List<String> words) { List<String> wordsList = words; String[] wordsArray = wordsList.toArray(new S
public static List<Frequency> computeWordFrequencies(List<String> words) {
List<String> wordsList = words;
String[] wordsArray = wordsList.toArray(new String[0]);
Arrays.sort(wordsArray);
Set<String> noDuplicates = new LinkedHashSet<>(Arrays.asList(wordsArray));
List<Frequency> frequencies = new ArrayList<>();
for (String word : noDuplicates) {
int wordFrequency = Collections.frequency(words, word);
Frequency newFrequency = new Frequency(word, wordFrequency);
System.out.println(newFrequency.toString());
frequencies.add(newFrequency);
}
for (Frequency f : frequencies) {
System.out.println(f.getText()+" "+f.getFrequency());
}
return frequencies;
}
我在代码中插入了print语句,以下是一些输出:
包装:1码:3纱:2年:2尚未:1育空:1零:2废弃2个手风琴2个acequia 2个横琴
2增加2 因此,当频率被创建时,它们具有正确的频率,但不知何故,它们后来都被更改为2。更奇怪的是,如果我将第二个print语句更改为f.toString(),即使第一个print语句也只显示2,频率如下: 上升:2河流:2河流边缘:2河流环绕:2道路:2道路跑步者:2 路边:2:2
有人能告诉我为什么所有频率都设置为2,或者问题出在哪里吗?从中删除
static
private static int frequency
您希望每个单词都有一个单独的实例变量,而不是所有单词都有一个类变量
另外,我建议频率计数器使用
Hashmap
,而不是创建任何包装器对象,因为
Collections.frequency
在循环中有O(n^2)个运行时private static int frequency