我有一个数组列表,我通过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()
方法不应触发"关键警告"。