Ни в одном из ответов не указано, что я сделаю первым.
Самый большой прыжок, который я когда-либо делал в своих ОО-способностях, был, когда я решил ВСЕГДА сделать еще один урок, когда казалось, что он может быть даже немного полезен - и это одна из вещей, которую я узнал, следуя этому шаблону.
Почти все время я обнаруживаю связь между объектами, которые пытаюсь поместить в хеш-таблицу. Чаще всего, есть место для класса - даже метод или два.
На самом деле, я часто нахожу, что мне даже не нужна структура типа HashMap - простой HashSet подходит.
Элемент, который вы храните в качестве первичного ключа, может стать идентификатором нового объекта - так что вы можете создать методы равенства и хэширования, которые ссылаются только на этот один объект (затмение может легко сделать ваши методы равенства и хэширования для вас). таким образом новый объект будет сохранять, сортировать и извлекать в точности так, как это делал ваш исходный объект, а затем использовать свойства для хранения остальных элементов.
В большинстве случаев, когда я это делаю, я обнаруживаю, что есть несколько методов, и прежде чем я это узнаю, у меня есть полноценный объект, который должен был быть там все время, но я никогда не узнавал, и куча мусорных факторов из моего кода.
Чтобы сделать его более "детским шагом", я часто создаю новый класс, содержащийся в моем исходном классе - иногда я даже храню класс в методе, если имеет смысл расширять его таким образом - тогда Я перемещаю это, поскольку это становится более ясным, что это должен быть первоклассный класс.