java – 按值维护SortedMap

我们知道,SortedMap将条目按键排序.我在这个论坛中阅读了许多主题,并看到了很多通过值对SortedMap进行排序的示例.但是,正如您所知,当我将一个项目置于默认的SortedMap时,它不会再次对Map进行排序,只需将此新条目放在应该的位置即可.

例如,

SortedMap<String,Person> sortedMap = new TreeMap();
Person p1 = new Person("John",38);
sortedMap.put(p1.getName(), p1);
Person p2 = new Person("Tom",34);
sortedMap.put(p2.getName(), p2); // does not sort, maintains sorted set by comparing the other values 
Person p3 = new Person("Susan",21);
sortedMap.put(p3.getName(), p3); // does not sort, maintains sorted set by comparing the other values

在这个论坛的许多主题中,我看到许多代码通过调用sort方法按值对SortedMap进行排序:

sortedMap.sort(sortedMap.entries()); 

正在调用此方法或其他方法以获取已排序的值.

但是,我需要一个Map实现,它保持值的排序,而不需要调用排序方法,如上所述.例如,在上面的代码中我只能调用firstKey()方法;但我需要调用firstValue()方法.

Person minimumAgePerson = sortedMap.firstValue().
System.out.println(minimumAgePerson.getName()); // it should print "Susan"

SortedSet不适合我的requiremenets,因为我可以放置一些新的Objects(Person),其键值已经在map中,这些刚添加的条目应该覆盖现有的对象(所以我需要一个map):

Person p4 = new Person("Susan",39);
sortedMap.put(p4.getName(),p4);
Person newMinimumAgePerson = sortedMap.firstValue(); 
System.out.println(newMinimumAgePerson.getName()); // it should print "Tom"

是否有实现完成此任务或我是否需要自己实现SortedSet?

最佳答案
通常,处理此类问题的最简单和最安全的方法是编写一个使用两个不同标准集合的类.该类可以提供您需要的方法,不一定符合任何java.util接口.

鉴于所述要求,我将使用SortedMap来包含值,并将HashMap映射键与值结合使用.要防止重复键,请将键值对放在HashMap中,检查put结果.如果密钥已存在,请在添加新值之前从SortedMap中删除旧值.

如果您有其他要求,则此特定设计可能无法涵盖所有​​内容,但组合java.util结构的概念通常很有用.

转载注明原文:java – 按值维护SortedMap - 代码日志