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



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

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容器的目的是什么,因为执行添加/删除操作要方便得多?

感谢

根据我的说法,他们必须向旧版本的java提供向后兼容性,这样旧版本的jre/jdk才能对Tomcat感到满意。否则,使用数组没有其他原因,但需要注意的是,ArrayList内部操纵数组,因此没有任何改进。但请注意,显然array[index]array.get(index)快。

相关内容

最新更新