我正在编写一个程序,计算每个唯一单词在文本文件中出现的次数,然后返回出现次数最多的单词以及出现次数。因为我不知道会有多少个不同的单词,所以我无法使用数组,因为我无法预测数组的大小。因此,我使用了两个并行的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;
}
答案 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()方法来获取列表中的元素数量。