Techniki implementacji tam nie żenią się bardzo dobrze. LinkedHashMap
dodaje połączony listing do obiektów wejściowych mapy. IdentityHashMap
używa techniki sondowania, dzięki czemu unika się jakichkolwiek obiektów wejściowych.
Istnieje kilka sposobów dodawania właściwości "tożsamości" do kolekcji/mapy.
- Siła klucz typu zachowywać się poprawnie z
final
equals
i hashCode
metod. Naprawdę wszystkie typy referencyjne powinny to mieć, ale nieważne.
- Jeśli nie można modyfikować
equals
i hashCode
ale można zmodyfikować klasę, dodać final
polu, które jest z final
klasy, która posiada final
odniesień do rodzaju, że zamierzasz użyć jako klucza. Użyj nowego pola jako klucza.
- Przechowuj obiekty adapterów w kolekcji/mapie. Będziesz musiał utworzyć nową instancję adaptera dla każdego wyszukiwania. Ma po prostu metody
equals
/hashCode
na wywołanie ==
/System.identityHashCode
na oryginalnym obiekcie.
czasami wystarczy IdentityHashMap, są przypadki, w których masz * zarówno * normalny HashMap z jakiegoś klienta równości, ale nadal trzeba równość tożsamości relacja w innym kontekście (raz miałem tę sytuację) – kutschkem