You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java实现:查找ArrayList中频率最高且值最大的元素

解决Java ArrayList中频率最高且值最大元素的问题

需求:现有Java ArrayList,元素为4、4、3、3、5、6,需实现方法找出其中出现频率最高的值;若多个元素出现次数相同,则返回值最大的元素(如示例应返回4)。

我来帮你完善这个需求的实现,这里提供两种方案:一种是基于你现有嵌套循环思路的修正版,另一种是更高效的HashMap实现,都能满足你的要求。


方法一:嵌套循环实现(直观易理解)

你的初始代码思路是对的,但存在内层循环起始索引错误的问题,我帮你修正并完善:

private int getFrequentNumber(ArrayList<Integer> arr) {
    // 先处理空列表的情况,避免空指针异常
    if (arr == null || arr.isEmpty()) {
        throw new IllegalArgumentException("传入的列表不能为空");
    }

    int popular = arr.get(0);
    int maxCount = 1;

    for (int i = 0; i < arr.size(); i++) {
        int current = arr.get(i);
        int tempCount = 0;
        // 统计当前元素在列表中的总出现次数
        for (int j = 0; j < arr.size(); j++) {
            if (current == arr.get(j)) {
                tempCount++;
            }
        }
        // 核心判断:要么次数更多,要么次数相同但当前元素值更大
        if (tempCount > maxCount || (tempCount == maxCount && current > popular)) {
            maxCount = tempCount;
            popular = current;
        }
    }
    return popular;
}

思路说明:

  • 先做参数校验,避免空列表导致的运行时错误
  • 初始化结果为列表第一个元素,最大出现次数为1
  • 外层循环遍历每个元素,内层循环统计该元素的总出现次数
  • 每次统计后和当前记录的最优结果比较:
    • 如果当前元素的出现次数比maxCount大,直接更新结果和最大次数
    • 如果次数相同,但当前元素的值比popular大,也更新结果

方法二:HashMap实现(高效推荐)

嵌套循环的时间复杂度是O(n²),当列表元素较多时效率较低,推荐用HashMap统计频率,时间复杂度可降到O(n):

import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;

private int getFrequentNumber(ArrayList<Integer> arr) {
    if (arr == null || arr.isEmpty()) {
        throw new IllegalArgumentException("传入的列表不能为空");
    }

    // 用HashMap存储元素与对应的出现次数
    Map<Integer, Integer> frequencyMap = new HashMap<>();
    for (int num : arr) {
        // getOrDefault简化统计逻辑:元素不存在则默认次数为0,之后加1
        frequencyMap.put(num, frequencyMap.getOrDefault(num, 0) + 1);
    }

    int popular = arr.get(0);
    int maxCount = 0;
    // 遍历HashMap筛选符合条件的元素
    for (Map.Entry<Integer, Integer> entry : frequencyMap.entrySet()) {
        int currentNum = entry.getKey();
        int currentCount = entry.getValue();
        // 同样的核心判断逻辑
        if (currentCount > maxCount || (currentCount == maxCount && currentNum > popular)) {
            maxCount = currentCount;
            popular = currentNum;
        }
    }
    return popular;
}

思路说明:

  • 第一步:遍历一次列表,用HashMap记录每个元素的出现次数
  • 第二步:遍历HashMap的键值对,按照规则筛选出频率最高且值最大的元素
  • 同样做了参数校验,保证代码的鲁棒性

测试你的示例列表[4,4,3,3,5,6],两种方法都会返回4,完全符合需求。

内容的提问来源于stack exchange,提问作者Mitch Wolfe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:34:19