Node.js'的时间复杂度是多少? EventEmitter.removeListener(event,listener)方法根据绑定到发射器上特定事件的侦听器数量?
链接:http://nodejs.org/api/events.html#events_emitter_removelistener_event_listener
对于普通情况,它是O(n)还是更接近O(1)?
基本上,我可能有数万个侦听器绑定到同一个事件,我需要将removeListener操作设置为O(1)。
答案 0 :(得分:1)
它是O(n),因为第230行有for
循环。之后有Array.splice
。
用于在数组中查找侦听器的O(n):
for (i = length; i-- > 0;) {
if (list[i] === listener ||
(list[i].listener && list[i].listener === listener)) {
position = i;
break;
}
}
还有O(n)用于从数组中删除侦听器:
list.splice(position, 1);