如何在ArrayList <integer>中找到最大值的索引?

时间:2019-05-25 17:35:15

标签: java arraylist

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

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

将ArrayList转换为数组
        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;
}

2 个答案:

答案 0 :(得分:1)

您可以使用Java Streams来获取最大值的索引:

int index = IntStream.range(0, myFreqs.size()).boxed()
        .max(Comparator.comparingInt(myFreqs::get))
        .orElse(-1);

答案 1 :(得分:0)

塞缪尔·菲利普(Samuel Philipp)的回答很好,但是,您无需转换为array就可以得到List的长度。 不用将ArrayList转换成数组int[],而是使用List.size()方法来获取列表中的元素数量。