相关内容: Java中是否有“LinkedConcurrentHashMap”数据结构?
我正在寻找一个用于保存事件监听器引用的集合类。
我的理想方案是,这个集合具有以下属性(按优先级排序):
- 保持插入顺序。早期的侦听器可能会取消事件,从而防止它被传递到后来添加的侦听器。如果使用像HashSet这样的类,其迭代器可能以错误的顺序返回元素,这将导致出错。
- 使用WeakReference以使监听器列表不会阻止监听器被垃圾回收。
- 集合是Set,因此重复项会自动删除。
- Iterator是线程安全快照,不受新侦听器添加的影响。也允许在多个线程上传递事件。(这不是必需的 - 我可以遍历集合的副本。)
我知道有一些类满足其中的一些但不是全部标准。例如:
java.util.LinkedHashSet
(#1 和 #3)java.util.WeakHashMap
,由Collections.newSetFromMap
包装(#2 和 #3)javax.swing.event.EventListenerList
(需要一些额外的同步)(#1 和 #4)java.util.concurrent.CopyOnWriteArraySet
(#1, #3和#4)
但没有同时满足标准#1和#2的类。这样的类是否存在于某个库中?
equals
方法真的很典型吗? - Kevin Bourrillion{Object o = new Object(); WeakReference r1 = new WeakReference(o), r2 = new WeakReference(o); return r1.equals(r2);}
返回false
。 - finnwListModel
,因此它们通常会从 GUI 中被强引用。 - finnw