为什么 Tomcat 的 LifyCycleSupport.java 使用数组而不是任何高级容器(ArrayList)来存储侦听器?
Why Tomcat's LifyCycleSupport.java use array to store listeners instead of any advanced containers(ArrayList)?
我最近在浏览tomcat的源代码,我发现在LifecycleSupport.java class中,它通过简单的数组存储监听器,
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 容器的目的是什么,因为执行 add/remove 操作要方便得多?
谢谢
根据我的说法,他们必须向旧版本 java 提供向后兼容性,以便旧 jre/jdk 感觉舒服 Tomcat.Otherwise 没有其他理由使用数组,但还有一件事要注意 ArrayList
在内部操作数组,所以没有改进 所以 ever.But 请注意这很明显 array[index]
比 array.get(index)
.
快
我最近在浏览tomcat的源代码,我发现在LifecycleSupport.java class中,它通过简单的数组存储监听器,
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 容器的目的是什么,因为执行 add/remove 操作要方便得多?
谢谢
根据我的说法,他们必须向旧版本 java 提供向后兼容性,以便旧 jre/jdk 感觉舒服 Tomcat.Otherwise 没有其他理由使用数组,但还有一件事要注意 ArrayList
在内部操作数组,所以没有改进 所以 ever.But 请注意这很明显 array[index]
比 array.get(index)
.