[英]How to use SortedMap interface in Java?
我有一个
Map<Float, MyObject>
根据浮动对地图进行排序的最佳方法是什么?
SortedMap
是最好的答案吗? TreeMap
? 我如何使用它?
我只创建一次地图并经常使用myMap.put()
和myMap.get()
替换MyObject
。
我会使用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());
}
TreeMap 可能是最直接的方法。 您可以像使用普通地图一样使用它。 IE
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 ,看看你还能用它做什么。
您可以使用内部实现 SortedMap 的 TreeMap 下面是示例
按升序排序:
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/
TreeMap 是 SortedMap 接口的一个实现,可以工作。
我如何使用它?
Map<Float, MyObject> map = new TreeMap<Float, MyObject>();
TreeMap
按键的自然顺序排序。 键应该实现Comparable
或与Comparator
兼容(如果您将一个实例传递给构造函数)。 在你的情况下, Float
已经实现了Comparable
所以你不必做任何特别的事情。
您可以调用keySet
以升序检索所有键。
使用与 Java 6 和更高版本捆绑的Map
实现中的任何一个实现NavigableMap
( SortedMap
的继承者):
TreeMap
。ConcurrentSkipListMap
。NavigableMap
仅供参考, SortedMap
接口由NavigableMap
接口接替。
如果使用尚未声明支持NavigableMap
第 3 方实现,则只需要使用SortedMap
。 在与 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<>() ;
......使用该地图的其余代码继续工作。
与 Java 11 捆绑在一起的Map
实现有 10 个。还有更多的实现由 3rd 方提供,例如Google Guava 。
这是我制作的图表,突出显示了每个的各种功能。 请注意,两个捆绑的实现通过检查键的内容来保持键的排序顺序。 此外, EnumMap
按照在该枚举上定义的对象的顺序保存其键。 最后, LinkedHashMap
记住原始插入顺序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.