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

如何根据传入的ID参数删除Java ArrayList中的对应Book元素

错误原因
  • 遍历集合时违规修改:你当前使用的增强for循环底层基于迭代器实现,遍历过程中直接调用ArrayList.remove()修改集合结构,不会同步告知迭代器,会触发ConcurrentModificationException,还会出现遍历遗漏、误删等异常表现。
  • 字符串比较逻辑错误:id是String引用类型,使用==比较的是两个对象的内存地址,而非字符串内容,只有两个字符串是同一个对象时才会匹配成功,绝大多数相同内容的字符串会匹配失败,如果判断条件写反还会出现全删列表的问题。
正确实现方案

方案1:Iterator迭代器实现(兼容所有Java版本)

你之前尝试迭代器失败大概率是写法错误,正确的迭代器删除写法如下,直接替换你的removeBook方法即可:

// Remove book from library
public void removeBook(String id) {
    Iterator<Book> iterator = books.iterator();
    while (iterator.hasNext()) {
        Book book = iterator.next();
        // 用equals比较字符串内容,前置id判断避免空指针
        if (id.equals(book.getId())) {
            // 用迭代器的remove方法,不会触发并发修改异常
            iterator.remove();
            // 如果id是唯一的,匹配到删除后可以直接break退出循环,提升性能
            break;
        }
    }
}

方案2:removeIf简化实现(Java 8及以上版本推荐)

Java 8为集合新增了removeIf方法,底层已经处理了遍历和删除的逻辑,一行代码即可完成需求:

// Remove book from library
public void removeBook(String id) {
    books.removeIf(book -> id.equals(book.getId()));
}
验证说明

修改后删除逻辑会直接移除匹配id的整个Book对象,不会仅删除id字段,也不会误删其他书籍,只需要保证你的Book类中getId()方法能正确返回书籍的id属性即可。

内容的提问来源于stack exchange,提问作者Yound Puddle Duck

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:45:04