我有一个
Map<Float, MyObject>
保持地图根据浮动量排序的最佳方法是什么?
是SortedMap
最好的答案?TreeMap
?如何使用?
我只创建一次地图,并替换了MyObject
经常使用的myMap.put()
和myMap.get()
。
我有一个
Map<Float, MyObject>
保持地图根据浮动量排序的最佳方法是什么?
是SortedMap
最好的答案?TreeMap
?如何使用?
我只创建一次地图,并替换了MyObject
经常使用的myMap.put()
和myMap.get()
。
@user157196
此处发布的答案stackoverflow.com/questions/109383/…–
NavigableMap
Java 6中添加了FYI,以取代旧版本SortedMap
。
Answers:
我会用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());
}
有关SortedMap的信息,请参见Java教程页面。
和这里的教程列表相关TreeMap的。
new Integer(n)
而不仅仅是裸整数?
TreeMap可能是最简单的方法。您可以像正常地图一样使用它。即
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,以了解您还可以做什么。
您可以使用TreeMap在内部实现SortedMap的示例如下
按升序排序:
Map<Float, String> ascsortedMAP = new TreeMap<Float, String>();
ascsortedMAP.put(8f, "name8");
ascsortedMAP.put(5f, "name5");
ascsortedMAP.put(15f, "name15");
ascsortedMAP.put(35f, "name35");
ascsortedMAP.put(44f, "name44");
ascsortedMAP.put(7f, "name7");
ascsortedMAP.put(6f, "name6");
for (Entry<Float, String> mapData : ascsortedMAP.entrySet()) {
System.out.println("Key : " + mapData.getKey() + "Value : " + mapData.getValue());
}
按降序排序:
如果您始终希望此创建图通常使用降序排列,那么如果只需要一次,则创建一个具有降序排列的TreeMap并将原始地图中的所有数据放入其中。
// Create the map and provide the comparator as a argument
Map<Float, String> dscsortedMAP = new TreeMap<Float, String>(new Comparator<Float>() {
@Override
public int compare(Float o1, Float o2) {
return o2.compareTo(o1);
}
});
dscsortedMAP.putAll(ascsortedMAP);
有关SortedMAP的更多信息,请阅读http://examples.javacodegeeks.com/core-java/util/treemap/java-sorted-map-example/
使用Map
与Java 6及更高版本捆绑在一起的任一实现NavigableMap
(的后继SortedMap
):
TreeMap
如果运行单线程的,如果映射是只读跨线程首先被填充后。ConcurrentSkipListMap
如果在多个线程之间操作映射,请使用。NavigableMap
仅供参考,该SortedMap
界面是由NavigableMap
接口。
仅SortedMap
当使用尚未声明其支持的3rd-party实现时,才需要使用NavigableMap
。与Java捆绑在一起的地图中,实现的两个实现SortedMap
也都实现了NavigableMap
。
s SortedMap的最佳答案?树图?
正如其他人提到的,SortedMap
是接口,而是该接口TreeMap
的多个实现之一(以及最近的实现)NavigableMap
。
拥有接口可以让您编写使用映射的代码,而无需担心如果以后决定在实现之间进行切换。
NavigableMap< Employee , Project > currentAssignments = new TreeSet<>() ;
currentAssignments.put( alice , writeAdCopyProject ) ;
currentAssignments.put( bob , setUpNewVendorsProject ) ;
如果以后更改实现,则此代码仍然有效。也许以后您需要一个支持并发的映射,以便跨线程使用。将该声明更改为:
NavigableMap< Employee , Project > currentAssignments = new ConcurrentSkipListMap<>() ;
…使用该映射的其余代码将继续工作。
Map
与Java 11捆绑在一起的有十种实现。第三者(例如Google Guava)提供了更多实现。。
这是我制作的图形表,突出显示了每种图形的各种功能。请注意,两个捆绑的实现通过检查密钥的内容来使密钥保持排序。同样,EnumMap
将其键保持在该枚举上定义的对象的顺序中。最后,LinkedHashMap
记住原始的插入顺序。