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

如何删除ArrayList中两个指定标签之间的元素且避免误删外部重复值

解决方案

你遇到的核心问题是removeAll()会匹配列表中所有相同值的元素删除,不要使用「收集待删除值再批量删除」的思路,改用以下两种实现即可解决:


方案1:收集需要保留的元素(推荐,逻辑简单不易出错)

boolean isInDeleteRange = false;
List<String> reserved = new ArrayList<>();
for (String element : elements) {
    // 遇到开始标签,进入删除区间
    if (element.startsWith(startTag)) {
        isInDeleteRange = true;
    }
    // 不在删除区间的元素直接保留
    if (!isInDeleteRange) {
        reserved.add(element);
    }
    // 遇到结束标签,退出删除区间
    if (element.endsWith(endTag)) {
        isInDeleteRange = false;
    }
}
// 用保留的元素直接替换原列表
elements.clear();
elements.addAll(reserved);

该方案完全规避了按值匹配删除的问题,也不需要处理遍历过程中修改列表的并发异常问题。


方案2:迭代器遍历原地删除

如果不想额外创建存储保留元素的列表,可以使用迭代器的安全删除方法:

boolean isInDeleteRange = false;
Iterator<String> iterator = elements.iterator();
while (iterator.hasNext()) {
    String element = iterator.next();
    if (element.startsWith(startTag)) {
        isInDeleteRange = true;
    }
    // 直接删除当前处于删除区间的元素
    if (isInDeleteRange) {
        iterator.remove();
    }
    if (element.endsWith(endTag)) {
        isInDeleteRange = false;
    }
}

迭代器的remove()方法只会删除当前遍历到的单个元素,不会影响其他位置相同值的元素。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:45:02