Скажем, у меня есть TreeMap<String, Treeset<Song>>
, где объект Song имеет три поля String и внутренний метод CompareTo.Ключи для карты - это уникальные слова в тексте, которые не являются общими словами, такими как «она», «the», «if» или «on».На карте имеется несколько копий песен, поскольку в среднем на одну песню отображается в среднем 60 слов.
Для дополнительной оценки профессор попросил нас придумать алгоритм для поиска 10 лучших значений.на карте.Я не решил проблему вовремя, вот почему я спрашиваю здесь.
Часть, на которой я поставлен, в отличие от упорядоченного массива или списка, вы не можете просто взятьверхние значения последовательно.Итак, я подумал о:
Create a PriorityQueue<Node> with the Comparator sorting the Nodes based
on the Set size
iterate over the map
for each map node
create a Node object with the key-value pair
insert Node into the queue
Несмотря на то, что в PriorityQueue будут все пары ключ-значение, верхние размеры будут наверху, и я могу просто получить первые десять.
Это кажется очень окольным путем, так как эта конкретная карта имеет более 31 000 узлов, отображающих более 637 000 значений.Есть ли лучший способ?