У меня есть объект Set, и я использую этот набор, чтобы гарантировать, что при добавлении к нему элемента, который уже существует в наборе, он не добавляется. Это простая часть, просто используйте Set.add();
Но после того, как это сделано, мне нужна ссылка на объект в наборе.
Что я по сути имею в виду, так это наличие .add()
, которое не возвращает логическое значение, но фактический объект, который вы пытались добавить (если он не был добавлен, тот, что в наборе). Уже есть реализация Set, которая делает это, или я должен написать свою собственную?
В данный момент я использовал Set.add()
, и если он возвращает false, я использую итератор для поиска в наборе. Хотя это работает, я нахожу это уродливым. Особенно при использовании реализации HashSet, которая должна иметь возможность быстрее находить объект с помощью хеш-кодов. Есть идеи?
РЕДАКТИРОВАТЬ: Wow, много ответов в относительно короткое время, спасибо. Итак, я пытаюсь создать определенную структуру данных, которая загружает данные из некоторого места и создает объекты из него. Эти данные могут содержать дубликаты, и это не было бы проблемой, если бы я использовал набор и просто нуждался в этом одном наборе, но структура данных должна добавить ссылки на эти уникальные объекты к другим объектам в структуре данных, поэтому мне нужны ссылки на (уникальные) объекты в наборе. Кроме того, я не могу просто не загружать данные, которые уже содержатся в наборе, потому что с ним связано больше (уникальных) данных, которые также добавляются вместе со ссылкой на те данные, которые уже содержались в наборе. , В целях иллюстрации (поскольку приведенное выше объяснение далеко не ясно), я приведу пример здесь:
Данные:
foo bar
1 3
1 4
2 5
Структура данных:
Set<Foo> totalFooSet
Set<Bar> totalBarSet
Foo:
sometype data
Set<Bar> barSet
Бар:
sometype data
Set<Foo> fooSet
Это похоже на отношение многих ко многим.
Я не уверен, есть ли здесь какой-то серьезный недостаток дизайна, я просмотрел его с другими людьми, и мы не можем понять, как сделать это по-другому. Мне нравится идея использования HashMap, поэтому я создам подкласс и добавлю к нему функцию addAndReturn ().