Да, вы можете абсолютно использовать ID для хэш-кода и его эквивалентов. В зависимости от количества сегментов в HashMap несколько объектов с разными идентификаторами будут совместно использовать один и тот же сегмент, а затем метод equals определит правильный объект. Поскольку вы планируете использовать уникальный идентификатор, метод equals сравнит идентификатор с каждым объектом в ведре -> LinkedList / Tree и определит уникальный объект.
Однако есть загвоздка. Вы можете использовать ID в Hashcode, если ID является своего рода автоматическим приращением, чтобы ваши объекты равномерно распределялись по сегментам. Однако, если ваше поле идентификатора представляет собой какой-то шаблон, например 4, 8, 12, 16 и т. Д. c., Вы в конечном итоге поместите большинство своих объектов в часть ведер. Поэтому в этом случае используйте Hashcode для генерации простого числа, поскольку простые числа являются лучшими кандидатами для равномерного распределения в сегментах.