为什么Tomcat的LifyCycleSupport.java使用数组来存储监听器而不是任何高级容器(ArrayList)?

时间:2015-03-01 06:38:04

标签: java arrays apache tomcat catalina

我最近浏览了tomcat的源代码,我发现在LifecycleSupport.java类中,它通过简单数组存储Listeners,

private LifecycleListener listeners[] = new LifecycleListener[0];

所以add()方法必须创建一个新数组来替换旧数组:

public void addLifecycleListener(LifecycleListener listener) {
   82   
   83         synchronized (listenersLock) {
   84             LifecycleListener results[] =
   85               new LifecycleListener[listeners.length + 1];
   86             for (int i = 0; i < listeners.length; i++)
   87                 results[i] = listeners[i];
   88             results[listeners.length] = listener;
   89             listeners = results;
   90         }
   91   
   92       }

我想知道使用数组而不是像ArrayList这样的高级java容器的目的是什么,因为它更方便执行添加/删除操作?

由于

1 个答案:

答案 0 :(得分:0)

根据我的说法,他们必须为旧版本的java提供 向后兼容性 ,以便旧的jre / jdk对Tomcat感到满意。否则没有其他理由可以使用数组,但还有一件事要注意ArrayList内部操纵数组,所以没有任何改进。但请注意,它显而易见array[index]array.get(index)更快。