It is a dictionary for speed reasons. A user might trigger trigger
thousands of events per seconds and iterating through large flat lists
can be very slow if there are many handlers.

Where is speedup improvements? In code that I found in Pharo 1.1 there is simple iteration by all dictionary items. And I think there is no places for speed improvements because subscribers can subscribers for announcement hierarchy (not concrete class).

Announcer>>announce: anAnnouncement
��� | announcement |
��� announcement := anAnnouncement asAnnouncement.
��� subscriptions ifNil: [ ^ announcement ].
��� subscriptions keysAndValuesDo: [ :class :actions |
��� ��� (class handles: announcement)
��� ��� ��� ifTrue: [ actions valueWithArguments: (Array with: announcement) ] ].
��� ^ announcement