Мне нужно иметь карту автоматически сортировки по значениям в Java - так, чтобы она продолжала сортироваться в любое время, когда я добавляю новые пары ключ-значение или обновляю значение существующей пары ключ-значение или даже удалить какую-либо запись.
Пожалуйста, имейте в виду, что эта карта будет действительно большой (100 тысяч или даже 10 миллионов записей в размере).
Итак, в основном я ищу следующую функциональность:
Предположим, что у нас был класс "SortedByValuesMap", который реализует вышеупомянутую функциональность и у нас есть следующий код:
SortedByValuesMap<String,Long> sorted_map = new SortedByValuesMap<String, Long>();
sorted_map.put("apples", 4);
sorted_map.put("oranges", 2);
sorted_map.put("bananas", 1);
sorted_map.put("lemons", 3);
sorted_map.put("bananas", 6);
for (String key : sorted_map.keySet()) {
System.out.println(key + ":" + sorted_map.get(key));
}
вывод должен быть:
bananas:6
apples:4
lemons:3
oranges:2
В частности, для меня действительно важно, чтобы можно было получить запись с помощью самое низкое значение в любое время - с помощью команды типа:
smallestItem = sorted_map.lastEntry();
который должен дать мне запись "апельсинов"
EDIT: Я новичок в Java, поэтому, пожалуйста, немного уточните в своих ответах - спасибо
EDIT2: Это может помочь: я использую это для подсчета слов (для тех, кто знаком: n-граммы в частности) в огромных текстовых файлах. Поэтому мне нужно построить карту, где ключи - слова, а значения - это частоты этих слов. Однако из-за ограничений (например, RAM), я хочу сохранить только самые распространенные слова X, но вы не можете заранее знать, какие из них будут наиболее частыми словами, конечно. Так, как я думал, что это может сработать (как приближение), начать отсчет слов, и когда карта достигнет верхнего предела (например, записи в 1 мил), наименее частая запись будет удалена, чтобы сохранить размер карты до 1 мил всегда.