繁体   English   中英

如何在 Java 中使用 SortedMap 接口?

[英]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());
}

请参阅SortedMapJava 教程页面
这里有一个与 TreeMap 相关的教程列表

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以升序检索所有键。

tl;博士

使用与 Java 6 和更高版本捆绑的Map实现中的任何一个实现NavigableMapSortedMap的继承者):

  • 如果运行单线程,或者如果地图在首次填充后跨线程只读,请使用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记住原始插入顺序。

Java 11 中的地图实现表,比较它们的特性

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM