我需要在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();
应该给我“oranges”条目。编辑:我是一个Java新手,请在你的答案中详细说明一些 - 谢谢。
编辑2:这可能会有所帮助:我正在使用它来计算巨大文本文件中的单词数(对于那些熟悉的人:特别是n-grams)。因此,我需要建立一个映射,其中键是单词,值是这些单词的频率。但是,由于限制(如RAM),我只想保留X个最常见的单词 - 但当然事先无法知道哪些将是最常见的单词。因此,我认为它可能起作用的方式(作为近似值)是开始计数单词,并且当映射达到顶部限制(例如1百万条目)时,将删除最不常见的条目,以使映射的大小始终为1百万。
TreeMap
排序(从而可迭代)的。 - Timothy Jones