HashMap
имеет постоянное время доступа, но не позволяет дублировать. ArrayList
позволяет дублировать, но не имеет постоянного времени доступа.
Есть ли структура данных в java, которая обеспечивает постоянное время доступа и позволяет дублировать?
Я знаю, что могу создать свой собственный HashMap
который позволяет дублировать, но я хочу использовать уже существующую структуру данных.
Заранее спасибо.
Вы можете использовать сумку из коллекций GS, Multiset из Google Guava или сумку из коллекций Amal Commons. Сумка в основном представляет собой Map<Key, Integer>
которая ведет себя как коллекция.
Все три библиотеки имеют Multimaps. Мультимап - это в основном Map<Key, Collection<V>>
, где вызывается, чтобы поместить результаты в дополнение к Collection<V>
вместо замены значения на этом ключе. Существуют разные типы Multimap (List, Set, Bag и т.д.).
Примечание. Я разработчик коллекций GS
ArrayList#set
ArrayList#get
и ArrayList#set
- это фактически постоянное время, а также несколько других функций. Прочтите документацию, второй абзац документации по классу:
Операции size, isEmpty, get, set, iterator и listIterator выполняются в постоянное время
Следующим вариантом будет мультимап. Это карта, в которой хранятся элементы в виде ключа/коллекции. Коллекция содержит значения, поэтому одна ключевая карта для нескольких значений. Вы можете посмотреть в Apache Common MultiMap
чтобы узнать, есть ли у них реализация, которая работает для вас. Или вы всегда можете создавать свои собственные, просто определяя коллекцию как значение:
Map<String, List<String>> multimap;
HashMap<Key,List<Value>>
?