Java SortedMap示例

时间:2020-02-23 14:37:15  来源:igfitidea点击:

SortedMap接口扩展了映射,并确保所有条目都按升序排列(因此SortedMap)。

如果你想让它按降序排列,你需要覆盖SortedMap中的Compare方法,我们马上就要做。TreeMap实现SortedMap,它或者按键的自然顺序排序,或者按指定的顺序排序比较器。英寸不允许树映射空键和空值。

方法总结

比较器<?super K>comparator():返回用于对当前映射中的键排序的比较器,如果当前映射使用其键的自然顺序,则返回null。

设置<地图。入口<K,V>>entrySet():返回当前映射中包含的映射的集合视图。

K firstKey():返回当前映射中的第一个键(最低或者最高,取决于实现映射的方式(升序或者降序))。

SortedMap<K,V>headMap(K toKey):返回当前地图中键严格小于toKey的部分的视图。

Set<K>keySet():返回当前映射中包含的键的集合视图

K lastKey():返回当前映射中的最后一个(最高或者最低)键

SortedMap<K,V>subMap(K fromKey,K toKey):返回当前地图的端口视图,其leys仅从fromKey到toKey

从地图上返回的关键点大于当前地图的关键点

Collection<V>values():返回当前映射中包含的值的集合视图

有关这些方法的更多详细信息,请查看Oracle官方文档。

代码实现

import java.util.*;

public class SortedHashMapExample {
 public static void main(String args[]) {
    Map<Double, String> players = new TreeMap<Double, String>();

    //health, name
    players.put(new Double(100.00), "Hill");
    players.put(new Double(120.00), "John");
    players.put(new Double(150.00), "Sabrina");
    players.put(new Double(105.00), "Caitlyn");
    players.put(new Double(110.00), "Rachel");
    players.put(new Double(130.00), "Michael");
    players.put(new Double(140.00), "Mark");

    //get a set of the entries
    Set setOfEntries = players.entrySet();

    //get an iterator
    Iterator iterator = setOfEntries.iterator();

    while(iterator.hasNext()) {
        //create an entry of the map
       Map.Entry entry = (Map.Entry)iterator.next();
       System.out.println("Key: " + entry.getKey());
       System.out.println("Value: " + entry.getValue());
    }
 }
}

输出

Key: 100.0
Value: Hill
Key: 105.0
Value: Caitlyn
Key: 110.0
Value: Rachel
Key: 120.0
Value: John
Key: 130.0
Value: Michael
Key: 140.0
Value: Mark
Key: 150.0
Value: Sabrina

如我们所见,它自动按升序对它们进行分组。从100.00点开始到150.00点。我之所以把健康作为一个键,把名字作为一个值,只是为了告诉你它提升了它们。

但是如果我们想按降序排列呢?

降序实现

import java.util.*;

public class SortedHashMapExample {
 public static void main(String args[]) {
    Map<Double, String> players = new TreeMap<Double, String>(new Comparator<Double>() {

      @Override
      public int compare(Double x, Double y) {
        return y.compareTo(x);
      }

    });

    //name, health
    players.put(new Double(100.00), "Hill");
    players.put(new Double(120.00), "John");
    players.put(new Double(150.00), "Sabrina");
    players.put(new Double(105.00), "Caitlyn");
    players.put(new Double(110.00), "Rachel");
    players.put(new Double(130.00), "Michael");
    players.put(new Double(140.00), "Mark");

    //get a set of the entries
    Set setOfEntries = players.entrySet();

    //get an iterator
    Iterator iterator = setOfEntries.iterator();

    while(iterator.hasNext()) {
        //create an entry of the map
       Map.Entry entry = (Map.Entry)iterator.next();
       System.out.println("Key: " + entry.getKey());
       System.out.println("Value: " + entry.getValue());
    }
 }
}

输出

Key: 150.0
Value: Sabrina
Key: 140.0
Value: Mark
Key: 130.0
Value: Michael
Key: 120.0
Value: John
Key: 110.0
Value: Rachel
Key: 105.0
Value: Caitlyn
Key: 100.0
Value: Hill

我们所做的只是重写compare方法,而不是x=>y(升序),而是改为y=>x(降序)。