2016-09-16 3 views
0

Предполагая, что пары ключ-значение поступают из потока, и мы читаем их один за другим и добавляем их к TreeMap, которые нужно сортировать по значению, тогда ключ, как я могу это достичь? Я не говорю о какой-либо карте-посреднике, с помощью которой я могу легко написать Comparator, чтобы получить соответствующее значение с этой карты и использовать ее в логике сортировки. Это недопустимо. Непосредственно, как это возможно. Я не думаю, что это возможно без использования другой структуры данных. Или я где-то собираюсь? Любое предложение!Добавление пар ключ-значение в TreeMap в порядке сортировки значений

Возьмем такой пример:

яблоко, 2
банан, 20
апельсин, 5

он должен быть в дереве, как:

яблока, 2
orange, 5
b anana, 20

+0

Javadoc для TreeMap является явным: «Реализация NavigableMap на основе Red-Black. Карта сортируется в соответствии с естественным порядком ее ключей или компаратором, предусмотренным на момент создания карты, в зависимости от того, какой конструктор используется. 'Таким образом, он сортирует только по ключам, если вы не предоставите компаратор. При этом вы можете просто использовать TreeMap с пользовательским компаратором, если это также недопустимо. – Taylor

ответ

0

Если не разрешено использовать дополнительные структуры, я бы использовал синтетические ключи на вашей карте деревьев, содержащие как исходный ключ, так и значение из вашего источника данных. В этом случае вы будете иметь что-то вроде:

[key, value] -> value 

Он не будет использовать гораздо больше памяти, так как вы имеете в виду один и тот же объект, значение в обоих местах. И для этого требуется иметь пользовательский компаратор, который сравнивает значения частей от синтетических ключей.

Итак, в конце вы должны определить еще два класса.

PS: Конечно, вы не сможете использовать эту карту, чтобы найти значение по оригинальным ключам больше. Он будет полезен только при упорядочении пар ключ-значение. Таким образом, было бы лучше использовать TreeSet с парами ключ-значение в качестве элементов.

Смежные вопросы