java - 如何在 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;
}
解决方案
Samuel Philipp 的回答非常好,但是,您无需转换为array
即可获得 List 的长度。不要转换ArrayList
成数组int[]
,而是使用List.size()方法来获取列表中的元素数量。
推荐阅读
- excel - 如何根据输入的参数输出一个值 Excel
- angular - Angular Unit Test,如何使用服务调用测试组件功能
- bluetooth - 重启ESP32后蓝牙重新连接
- javascript - Wordpress - 向编辑器添加自定义媒体按钮不起作用。事件监听器没有捕捉到点击
- sql - 计算 Pivot SQL 中的总天差
- docker - docker push 到本地注册表失败
- mysql - 如何更改或填充变量内的数据库名称
- jenkins - groovy中的build方法可以返回build ID和build status吗?
- video - 如何将视频播放器插入 Buefy 模式?
- powershell - 合并两个没有重复的xml文件