修复声纳冲突:如果集合很大,则此对"remove()"调用可能是性能热点



我有一个数组列表,我通过ArrayList .remove()删除元素。

List<FooListener> listeners = new ArrayList ();
public void removeListener(FooListener listener) {
listeners.remove(listener); // critical sonar warning
}

Sonar将其显示为关键问题,因为它可能会影响性能:

调用"remove()"如果集合很大,可能是性能热点。

这应该如何修复?

我也只能"确认";在SonarQube中解决这个问题,而不仅仅是将其设置为"不会修复"之类的东西。在不相关的情况下,它怎么能被忽视呢?

问问自己您的集合可以。不要太早尝试微优化,这可能不值得。

ArrayList在许多方面都很好(随机访问,内存占用,…),但不移除。LinkedList很适合移除(只有当使用Iterator时,正如@AndyTurner所指出的那样),但不适合随机访问等。为您的用例选择合适的。

编辑:如果您使用ArrayList来保存侦听器,则可能需要使用Set来代替,其中remove()方法不应触发"关键警告"。