Я не думаю, что есть стандартный класс библиотеки, который мог бы эффективно поддерживать такую функциональность. Лучшая реализация зависит от того, как часто вы хотите использовать какие операции (добавлять, удалять, находить максимум, удалять максимум, перемещаться в порядке, ...).
Один специальный случай был бы, если бы вы только добавлять и удалять элементы и только время от времени вы хотели бы пройти/список всех элементов в порядке, в таком случае, я предлагаю следующие реализации:
Чтобы добавить и удалить, сохраните свои данные в любом Map<String, Integer>
(например, HashMap
или TreeMap
), где имя соответствует частоте, что позволит быстро добавлять и удалять. Если вам нужно будет перечислять имена по частоте, просто потяните все данные на List
и отсортируйте их с помощью подходящего компаратора.
Однако предыдущая реализация не удалась, если вы хотите, например, заглянуть в максимальный элемент после каждой вставки. В таком случае я бы использовал некоторую гибридную структуру, например, комбинацию карты и кучи (используйте оба), карту для быстрого поиска имен и кучи для выбора элемента с максимальной частотой.
Нет, поскольку набор без дубликатов, упорядоченный или иным образом, означает, что все в наборе имеет частоту 1. Вам, вероятно, потребуется создать собственную реализацию на основе более простых типов, которая предоставит вам не дубликат вывода, сохраняя при этом запоминание частот в (возможно, дублирующем) входе. – RealSkeptic
Я не верю, что это уже реализовано, но было бы довольно легко сделать по своему усмотрению. Просто создайте объект со строкой и поле «приоритет», а затем создайте этот объект «Comparable» на основе этого поля приоритета. – River