我需要有一个自动地Java 中的按值排序映射 - 以便在我添加新的键值对或更新现有键值对的值,甚至删除某些条目时,它随时保持排序。
还请记住,这张地图将非常大(大小为数百个,甚至数百万个条目)。
所以基本上我正在寻找以下功能:
假设我们有一个类“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();
这应该给我“橘子”条目
编辑:我是 Java 新手,所以请详细说明您的答案 - 谢谢
EDIT2:这可能有帮助:我用它来计算巨大文本文件中的单词数(对于熟悉的人来说:特别是 n-gram)。所以我需要构建一个地图,其中键是单词,值是这些单词的频率。但是,由于限制(例如 RAM),我只想保留 X 个最常用的单词 - 但您当然无法事先知道哪些将是最常用的单词。因此,我认为它可能起作用的方式(作为近似值)是开始计算单词数,当地图达到上限(例如 100 万个条目)时,将删除最不频繁的条目,以便将地图的大小保持为总是一百万。