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