如何获取ArrayList前N个元素中的最大值?
取ArrayList前3个元素最大值的实现方式
- ArrayList自带的
subList方法完全可以实现这个需求,不需要额外编写循环比较的冗余逻辑 subList的截取规则:接收两个整数参数,第一个是截取区间的起始索引(会被包含在结果中),第二个是截取区间的结束索引(不会被包含在结果中)
针对存储了10、20、30、40、50的整数ArrayList,计算前3个元素最大值的完整代码如下:
// 截取从索引0到索引3的区间,对应原集合索引0、1、2位置的前3个元素 List<Integer> firstThreePart = arrayList.subList(0, 3); // 复用你已经掌握的Collections.max方法计算子列表的最大值 int maxOfFirstThree = Collections.max(firstThreePart);
按照示例数据,上述代码运行得到的结果就是30,和预期完全一致。
相关注意事项
subList返回的是原集合的动态视图,并非独立拷贝的新列表,仅用来读取计算最大值时不会产生额外内存开销,也不会修改原集合内容- 实际使用时需要做边界兼容:如果原集合元素总数不足3个,直接传入结束索引3会触发索引越界异常,此时可以将结束索引替换为
Math.min(arrayList.size(), 3)规避报错 - 如果不使用
subList,也可以手动循环遍历前3个元素记录最大值,但这种写法代码量更长,复用性远不如基于subList配合Collections.max的实现,完全没必要重复造轮子
内容的提问来源于stack exchange,提问作者Ron Mercer
相关产品推荐
相关产品推荐

