Guava MapMaker (). Слабые ключи (). MakeMap () против слабого хэша - PullRequest
6 голосов
/ 17 ноября 2010

У нас есть сервер Scala, который получает дерево узлов с использованием буферов протокола через сокет, и нам необходимо присоединить дополнительные данные к каждому узлу.

В однопоточном контексте, когда дерево узлов исвязанные данные будут удалены одновременно с сильными ссылками (из-за выхода из области видимости), есть ли причина использовать MapMaker из Google Guava со слабой клавишей () по сравнению с WeakHashMap?Похоже, что с MapMaker платят за синхронизированный доступ, который в этом случае не нужен.

В качестве отступления было бы полезно, если бы MapMaker предоставил доступ к настройкам эквивалентности, чтобы можно было выбрать ссылкуравенство, но не заботиться о слабых или мягких ссылках.

1 Ответ

6 голосов
/ 20 ноября 2010

Одним существенным недостатком WeakHashMap является то, что это не «карта личности». То есть он использует equals() и hashCode (а не == и identityHashCode) для клавиш, что на самом деле не имеет смысла для слабых клавиш. Вы можете обойти эту ошибку, убедившись, что ваши ключи используют равенство идентификаторов в их методе equals.

...