为什么听众列出了列表?

Joo*_*kka 12 java list listener

为什么监听器列表(例如在Java中使用addXxxListener()removeXxxListener()注册和取消注册侦听器的列表)被称为列表,并且通常实现为列表一套不是更合适,因为在听众的情况下

  • 无论他们被调用的顺序如何(尽管可能存在这样的需求,但它们是特殊情况;普通的监听器机制没有这样的保证),并且
  • 不需要多次注册同一个监听器(无论这样做是否应该导致调用同一个监听器1次或N次,或者是一个错误,是另一个问题)

这只是一个传统问题吗?无论如何,套装都是引擎盖下的某种列表.是否存在性能差异?迭代List比通过迭代更快还是更慢Set?要么采取更多或更少的记忆?差异肯定几乎可以忽略不计.

Mar*_*ark 9

将侦听器列表作为列表(而不是集合)的一个重要原因也解释了为什么您经常看到它们通过向后迭代.一个常见的场景涉及监听器在收到某些更改通知时将自身移除为监听器.如果侦听器存储为列表并向前迭代(或存储为集合并以某种未确定的顺序迭代),则将自身移除为侦听器将导致ConcurrentModificationException.

因此,相反,侦听器存储为列表并以向后顺序通知.然后,如果侦听器在通知时将其自身从侦听器列表中删除,则不会导致ConcurrentModificationException或移动其他尚未通知的侦听器的索引.