我有一个
Map<Float, MyObject>
根据浮动来保持地图排序的最佳方法是什么?
SortedMap
是最佳答案吗? TreeMap
?我该如何使用它?
我只创建一次地图,并使用MyObject
和myMap.put()
经常替换myMap.get()
。
答案 0 :(得分:81)
我会使用TreeMap
,它实现SortedMap
。它完全是为此设计的。
示例:
Map<Integer, String> map = new TreeMap<Integer, String>();
// Add Items to the TreeMap
map.put(1, "One");
map.put(2, "Two");
map.put(3, "Three");
// Iterate over them
for (Map.Entry<Integer, String> entry : map.entrySet()) {
System.out.println(entry.getKey() + " => " + entry.getValue());
}
请参阅Java tutorial page for SortedMap here a list of tutorials与TreeMap有关。
答案 1 :(得分:41)
TreeMap可能是最简单的方法。你使用它就像普通的Map一样。
即
Map<Float,String> mySortedMap = new TreeMap<Float,MyObject>();
// Put some values in it
mySortedMap.put(1.0f,"One");
mySortedMap.put(0.0f,"Zero");
mySortedMap.put(3.0f,"Three");
// Iterate through it and it'll be in order!
for(Map.Entry<Float,String> entry : mySortedMap.entrySet()) {
System.out.println(entry.getValue());
} // outputs Zero One Three
值得一看api文档http://download.oracle.com/javase/6/docs/api/java/util/TreeMap.html,看看你能用它做些什么。
答案 2 :(得分:3)
TreeMap是SortedMap接口的一个实现,可以使用。
我该如何使用它?
Map<Float, MyObject> map = new TreeMap<Float, MyObject>();
答案 3 :(得分:2)
TreeMap
按关键自然顺序排序。密钥应该实现Comparable
或与Comparator
兼容(如果您将一个实例传递给构造函数)。在您的情况下,Float
已经实现了Comparable
,因此您无需执行任何特殊操作。
您可以调用keySet
按升序检索所有密钥。
答案 4 :(得分:0)
使用与Java 6捆绑在一起的Map
实现中的一种,以及以后的实现NavigableMap
(SortedMap
的后继)的实现:
TreeMap
。 ConcurrentSkipListMap
。NavigableMap
仅供参考,SortedMap
界面由NavigableMap
界面取代。
如果使用尚未声明支持SortedMap
的第三方实现,则只需要使用NavigableMap
。在与Java捆绑在一起的地图中,实现SortedMap
的两个实现也都实现了NavigableMap
。
的SortedMap最佳答案?树图?
正如其他人所述,SortedMap
是一个接口,而TreeMap
是该接口(以及最近的NavigableMap
的多个实现之一)。
具有接口允许您编写使用映射的代码,如果以后决定在实现之间进行切换,则不会中断。
NavigableMap< Employee , Project > currentAssignments = new TreeSet<>() ;
currentAssignments.put( alice , writeAdCopyProject ) ;
currentAssignments.put( bob , setUpNewVendorsProject ) ;
如果以后更改实现,则此代码仍然有效。也许以后您需要一个支持并发的映射,以便跨线程使用。将该声明更改为:
NavigableMap< Employee , Project > currentAssignments = new ConcurrentSkipListMap<>() ;
...并且使用该映射的其余代码将继续工作。
与Java 11捆绑在一起的Map
有十种实现。还有更多的第三方提供的实现,例如Google Guava。
这是我制作的图形表,突出显示了每种图形的各种功能。请注意,两个捆绑的实现通过检查密钥的内容来使密钥保持排序。同样,EnumMap
保持其键在该枚举上定义的对象的顺序中。最后,LinkedHashMap
会记住原始的插入顺序。