Вы должны использовать HashMap неупорядоченный, а затем каждый раз, когда вы хотите заказать, поместите все значения HashMap в TreeMap, используя Comparator, который имеет HashMap в качестве переменной.
Затем для каждого ключа, который вы сравниваете, вы получаете значение HashMap (список) и проверяете размер списка. Таким образом, вы сравниваете размеры списка, возвращая -1, 0 или 1 в зависимости от случая.
Как только вы закончите то, что вам нужно, вы выбросите этот TreeMap.
Если вы попытаетесь использовать только TreeMap, то увидите, что вы заказываете ключи в соответствии со значением, которое не является свойством такого ключа. В этом случае длина значения (список). Таким образом, может существовать функция, которая увеличивает длину списка, и TreeMap даже не заметит.
Некоторый код:
public class ListSizeComparator implements Comparator<String> {
private final Map<String, List<String>> map;
public ListSizeComparator(final Map<String, List<String>> map) {
this.map = map;
}
@Override
public int compare(String s1, String s2) {
//Here I assume both keys exist in the map.
List<String> list1 = this.map.get(s1);
List<String> list2 = this.map.get(s2);
Integer length1 = list1.size();
Integer length2 = list2.size();
return length1.compareTo(length2);
}
}
'TreeMap' with Comparator - это путь IMO .. Какая у вас была ошибка? – paislee
Чтобы укрепить сообщение других ответов, вы не можете сортировать HashMap (или, вообще говоря, карту). Вам придется использовать определенные версии Карты, которые поддерживают сортировку. TreeMap кажется лучшим снимком для сортировки по значениям. – madth3
TreeMap сортирует ключ, а не значение. –