Iterating Collections — Adding & Removing

DEX455 - Apex 控制流语句:条件判断、Switch 分支与循环完全指南

📄 第 125 页 🎬 视频课程

课程章节介绍

同学们,咱们今天来看一个在写 Apex 代码时特别容易踩的坑,也是面试和实际开发里经常被考察的知识点:,在循环里修改集合,。 你想象一个场景:手里有一串客户名单,你想把里面不活跃的客户直接删掉。很可能顺手就写一个 for 循环,在里面用 `list.remove()`,对吗?结果一执行,系统直接就报错了,告诉你“不能修改集合”。这是为啥呢? 因为 Salesforce 为了保证数据的完整性和循环的稳定性,,明确禁止在迭代一个集合的同时,往里添加或者删除元素,。不管你是用列表、集合还是映射,都会遇到同样的问题。那该怎么做呢?别急,老师教你几招非常简单的处理模式。 ,如果你想在循环的时候添加元素,,千万别直接往当前集合里塞。办法是:先准备一个临时的小盒子——可以是一个临时的列表、临时集合或者临时映射。把需要新增的元素先装进这个临时盒子里。等整个循环跑完了,再用 `addAll` 或 `putAll` 一次性把临时盒子里的东西倒进原始集合。这样就分成了两个独立步骤,互不影响。 ,如果是想在循环里删除元素,,针对列表,有两种常用做法。第一种是新建一个列表,然后在循环里判断,把你要,保留,的那些元素复制到新列表里,循环结束以后直接用新列表替换掉原来的。这样你压根就没动正在迭代的旧列表。第二种是把想要删除的元素先记录到一个临时列表里,等循环结束后,再拿着这个“删除清单”一次性地从原列表里删掉。对于映射和集合呢,就更简单了:循环时把想要删除的,键,存到一个临时列表里,等迭代完,再用这个键列表去原集合里逐一删除。 说到这儿,还要特别提醒一个性能细节。`List.remove` 这个方法的时间复杂度是,线性,的,也就是说,如果要删的元素在列表很靠前的位置,后面所有元素都得往前挪。假如你在一个大循环里频繁地调 `remove`,不仅慢,还会消耗大量 CPU 资源,很容易就撞上 Salesforce 的调控器限制。所以,更推荐的上策是,尽量构造新集合去保留你需要的数据,,或者把删除操作集中到循环外批量执行,这样才能保证代码又稳又高效。 总结一下,核心原则就一句话:,迭代时不碰原集合,想添加就暂存暂存再合并,想删除就标记标记后集中删,或者新建集合留你想留的。, 记住这个心法,你以后再处理集合操作就能避开一堆奇怪错误了。 好了,今天这一页的重点你掌握了吗?下回写循环的时候一定留个心眼哦。

关键词

Apex Salesforce Developer Guide