Коллекция Java для этого варианта использования

Допустим, у нас есть группа объектов Car.

У каждой машины есть некоторые отличительные свойства, например производитель, модель, год и т. Д. (Их можно использовать для создания различных хэш-кодов) . Дело в том, что эти списки могут пересекаться - Автомобиль может появляться более чем в одном списке.

Мы хотим объединить списки в единую коллекцию Автомобилей, где каждый Автомобиль содержит все встреченные для него Предложения Покупки.

Моя проблема заключается в выборе что собирать, чтобы использовать в этом процессе агрегации:

Кажется естественным использовать java.util.HashSet для хранения наших автомобилей, таким образом, просматривая различные списки автомобилей, мы можем проверить, есть ли автомобиль уже существует в Наборе в амортизированной O (1), однако - вы не можете получить элемент из набора (в нашем случае - когда мы сталкиваемся с автомобилем, который уже существует в наборе, мы хотели бы получить этот автомобиль из набора на основе его идентификационного хэш-кода и добавить к нему PurchaseOffers) .

Я могу использовать HashMap, где хэш-код каждого автомобиля сопоставляется с фактическим объектом Car, но, вероятно, это не школьное решение, так как оно небезопасно - я должен был бы сам убедиться, что каждый хэш-код сопоставляется с Car с этим hashCode - может быть несоответствие. Конечно, можно создать определенную структуру данных, которая гарантирует такую ​​согласованность - разве она не должна существовать?

Может ли кто-нибудь предложить структуру данных, которую я ищу, или указать на ошибку дизайна? Спасибо.

7
задан bloodcell 5 April 2011 в 09:45
поделиться