Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字频计数器,列表工作不正常_Java_Arrays_List_Arraylist_Frequency - Fatal编程技术网

Java 字频计数器,列表工作不正常

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

我有一些代码可以计算给定单词数组列表中的单词频率。我有一个frequency类,它主要存储单词及其各自的频率。这是我的密码:

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