Java 集合的 5 个性能陷阱——ArrayList 的 remove 居然是 O(n)
引言 带新同事做订单去重的需求,他写出了这样一段代码:List 里 10 万条订单 ID,要移除一批黑名单 ID,他选择了 list.removeAll(blackList)——然后在压测时发现这个接口要跑 40 多秒。他一脸困惑:"ArrayList 的 remove 不就是删个元素吗?" 这是 Java 集合最典型的认知偏差:API 写起来一行代码,底层复杂度却是天壤之别。集合框架的 API 设计得太"平"了——list.remove(i)、list.get(i)、map.put(k,v) 全都长一个样,编译器不会提醒你"这个操作是 O(n)",JVM 也不会报错,只有当数据量上来后,CPU 和监控才会替它呐喊。 这篇文章梳理 5 个最常见、最容易在生产代码里扎根的集合性能陷阱。每个陷阱给三样东西:触发代码、底层源码原理、修复方案 + 实测量级对比。 #陷阱错误直觉正确复杂度频率 1ArrayList.remove(Object)"删除很快"O(n) 查找 + O(n) 搬移高 2LinkedList.get(index)"LinkedList 增删快"O(n) 逐节点走极....