我最近浏览了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)
快。