Мне нужно иметь автоматически карту сортировки по значениям в Java - чтобы она продолжала сортироваться в любое время, пока я добавляю новые пары ключ-значение или обновляю значение существующегопара ключ-значение, или даже удалить некоторые записи.
Пожалуйста, имейте в виду, что эта карта будет очень большой (100 тысяч или даже десятки миллионов записей в размере).
Так что в основном я ищуследующая функциональность:
Предполагается, что у нас есть класс '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();
, которая должна дать мне «апельсины»entry
РЕДАКТИРОВАТЬ: Я новичок в Java, поэтому, пожалуйста, уточните немного в ваших ответах - спасибо
EDIT2: Это может помочь: я использую это для подсчета слов (для тех, кто знаком:в частности, n-грамм) в огромных текстовых файлах.Поэтому мне нужно построить карту, где ключи - это слова, а значения - частоты этих слов.Однако из-за ограничений (например, ОЗУ) я хочу сохранить только X наиболее часто встречающихся слов - но вы не можете заранее знать, какие слова будут самыми частыми, конечно.Таким образом, я думал, что это может работать (в качестве приблизительного значения), чтобы начать подсчет слов, и когда карта достигает верхнего предела (например, 1 миллион записей), наименее частая запись будет удалена, чтобы сохранить размер карты1 мил всегда.