首页 > 解决方案 > 如何在 ArrayList 中找到最大值的索引?

问题描述

我正在编写一个程序来计算每个唯一单词在文本文件中出现的次数,然后返回出现次数最多的单词以及它出现的次数。因为我不知道会有多少不同的单词,所以我不能使用数组,因为我无法预测它需要多大。因此我使用了两个并行的 ArrayList。myWords 是字符串列表,myFreqs 是整数列表,因此 myFreqs 中的每个索引都包含存储在 myWords 的同一索引中的单词的出现次数。

为此,我正在尝试编写一个 for 循环来标识 myFreqs 中包含最高值的索引。我正在努力编写这个循环,因为 ArrayList 没有 .length() 方法,所以我不确定在循环中编写停止条件的最佳方法。我尝试使用将 ArrayList 转换为 Array

        myFreqs.toArray(<Integer> array);

这样我就可以获得数组的长度,但这给了我编译时错误。我已经尝试了上面几个稍微不同的版本,我得到了“非法的表达式开始”错误或“不能从静态上下文引用非静态方法”错误。我感觉有一种更简单、更直接的方法可以实现我所忽略的我想要的东西。

private ArrayList<String> myWords;
private ArrayList<Integer> myFreqs;

public int findIndexOfMax () {
    int[] array = new Array[100];
    myFreqs.toArray(<Integer> array);
    int maxVal = 0;
    int maxIdx = -1;
    for (int k = 0; k < array.length; k++) {
        if (array[k] > maxVal) {
            maxVal = array[k];
            maxIdx = k;
        }
    }
    return maxIdx;
}

标签: javaarraylist

解决方案


Samuel Philipp 的回答非常好,但是,您无需转换为array即可获得 List 的长度。不要转换ArrayList成数组int[],而是使用List.size()方法来获取列表中的元素数量。


推荐阅读