怎样提升集合遍历效率?
查看完整题解
参考回答
直接回答
先选符合容器特点的遍历方式,再减少循环里的重复工作。LinkedList 用迭代器顺序走,避免反复 get(i);Map 需要键和值时直接遍历 entrySet;只找一个结果时及时结束。forEach、Stream、并行流没有固定速度排名,优化应依据真实数据和测量结果。
讲清原理
算法上的差别通常比换语法更值得关注。对链表做下标循环可能 O(n²),换成一次顺序遍历可降到 O(n)。遍历 HashMap 时,成本还与桶容量加 size 有关,过度预分配可能让空桶扫描增加。
循环内重复网络请求、对象解析或不必要复制,可能比遍历器本身贵得多。并行处理需考虑拆分、合并、共享状态与调度开销;并发容器还要保证所观察的变化符合业务,而不是为了快牺牲一致性。
例子与易错点
Java 21 的 main 片段:
var map = new java.util.HashMap<String, Integer>();
map.put("A", 2);
map.put("B", 3);
int total = 0;
for (var entry : map.entrySet()) total += entry.getValue();
System.out.println(total);
输出 5,且不依赖键迭代顺序。若只需要值,values 更能表达意图;若同时要键和值,entrySet 可避免逐键再次 get。性能结论要记录 JDK、数据量和负载,使用 JMH 核验,不能编造提速百分比。
相关题:第 5 题、第 10 题、第 35 题、第 38 题。
这道题,你掌握得怎么样?
掌握程度由你主动标记,阅读和收藏不会自动改变状态。