Мне нужна структура данных, которая работает как мультимножество STL, но TreeSet в Java не допускает дублирования элементов. Есть ли какая-либо встроенная структура данных в Java, которая эквивалентна мультимножеству?
Есть ли в Java многоуровневая структура данных, подобная C++ STL?
Ответ 1
В стандартных библиотеках Java нет Multiset. Вы должны использовать инфраструктуру Google Guava, которая содержит классы Multiset. См.
Ответ 2
Использование Map<E, Integer>
, где Integer - это счет, является хорошей заменой для Multiset, и ему также не нужна сторонняя библиотека.
Обновление: Если вы действительно хотите сохранить объект дважды, используйте Список с такой картой, как Map<E, List<E>>
.
Ответ 3
Алгоритмы 4-го издания имеют Bag
которые доступны на веб-сайте книги. Вы также можете просмотреть javadoc в Интернете.
Класс Bag представляет собой сумку (или мультимножество) общих элементов. Он поддерживает вставку и повторение элементов в произвольном порядке.
Вероятно, вы просто захотите посмотреть исходный код, если Bag
- это все, что вам нужно, но в algs4.jar
есть много других интересных вещей, поэтому стоит посмотреть.
Ответ 4
Коллекции сообщества Apache Bag
и SortedBag
. Похоже, что TreeBag
может удовлетворить ваши потребности, но есть множество вариантов выбора.
Ответ 5
TreeSet<Integer> set = new TreeSet<>();
TreeSet<Integer> multiset = new TreeSet<>((i, j) -> i < j ? 1 : -1);
Сделать набор мультимножеств, просто сделав 1!= 1!
Ответ 6
Вы можете использовать PriorityQueue. Элементы сортируются в их естественном порядке, или, если вы их предоставили, компаратором, допускаются дубликаты.