по теме: Есть ли у 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. Есть ли такой класс в библиотеке где-нибудь?