原文: https://javatutorial.net/java-sortedmap-example

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

Java `SortedMap`示例 - 图1

如果要按降序排列它,则需要重写SortedMap中的Compare方法,我们将在稍后进行操作。TreeMap实现SortedMap,并按其自然顺序或指定的比较器对键进行排序。在TreeMap 中,不允许使用空键和空值。

Java `SortedMap`示例 - 图2

方法摘要

  1. Comparator <? super K> comparator():返回用于对当前映射中的键进行排序的比较器;如果当前映射使用其键的自然顺序,则返回null
  2. Set<Map.Entry<K,V>> entrySet():返回当前映射中包含的映射的Set视图。
  3. K firstKey():返回映射中当前的第一个键(最低还是最高,取决于实现映射的方式(升序还是降序)。
  4. SortedMap<K,V> headMap(K toKey):返回当前映射中其键严格小于toKey的部分的视图。
  5. Set<K> keySet():返回当前映射中包含的键的Set视图
  6. K lastKey():返回映射中当前的最后一个(最高或最低)键
  7. SortedMap<K,V> subMap(K fromKey, K toKey):返回当前映射的部分视图,其有效范围从fromKeytoKey
  8. SortedMap<K,V> tailMap(K fromKey):返回当前映射中键大于或等于fromKey的部分的视图
  9. Collection <V> values():返回当前映射中包含的值的集合视图

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

代码实现

  1. import java.util.*;
  2. public class SortedHashMapExample {
  3. public static void main(String args[]) {
  4. Map<Double, String> players = new TreeMap<Double, String>();
  5. // health, name
  6. players.put(new Double(100.00), "Hill");
  7. players.put(new Double(120.00), "John");
  8. players.put(new Double(150.00), "Sabrina");
  9. players.put(new Double(105.00), "Caitlyn");
  10. players.put(new Double(110.00), "Rachel");
  11. players.put(new Double(130.00), "Michael");
  12. players.put(new Double(140.00), "Mark");
  13. // get a set of the entries
  14. Set setOfEntries = players.entrySet();
  15. // get an iterator
  16. Iterator iterator = setOfEntries.iterator();
  17. while(iterator.hasNext()) {
  18. // create an entry of the map
  19. Map.Entry entry = (Map.Entry)iterator.next();
  20. System.out.println("Key: " + entry.getKey());
  21. System.out.println("Value: " + entry.getValue());
  22. }
  23. }
  24. }

输出

  1. Key: 100.0
  2. Value: Hill
  3. Key: 105.0
  4. Value: Caitlyn
  5. Key: 110.0
  6. Value: Rachel
  7. Key: 120.0
  8. Value: John
  9. Key: 130.0
  10. Value: Michael
  11. Key: 140.0
  12. Value: Mark
  13. Key: 150.0
  14. Value: Sabrina

如您所见,它将自动按升序对它们进行分组。 它的生命值从 100.00 开始,直到 150.00。 我将健康作为关键,并将名称作为值的原因只是为了向您表明它提升了他们。

但是,如果我们希望按降序排列它们怎么办?

使用降序实现

  1. import java.util.*;
  2. public class SortedHashMapExample {
  3. public static void main(String args[]) {
  4. Map<Double, String> players = new TreeMap<Double, String>(new Comparator<Double>() {
  5. @Override
  6. public int compare(Double x, Double y) {
  7. return y.compareTo(x);
  8. }
  9. });
  10. // name, health
  11. players.put(new Double(100.00), "Hill");
  12. players.put(new Double(120.00), "John");
  13. players.put(new Double(150.00), "Sabrina");
  14. players.put(new Double(105.00), "Caitlyn");
  15. players.put(new Double(110.00), "Rachel");
  16. players.put(new Double(130.00), "Michael");
  17. players.put(new Double(140.00), "Mark");
  18. // get a set of the entries
  19. Set setOfEntries = players.entrySet();
  20. // get an iterator
  21. Iterator iterator = setOfEntries.iterator();
  22. while(iterator.hasNext()) {
  23. // create an entry of the map
  24. Map.Entry entry = (Map.Entry)iterator.next();
  25. System.out.println("Key: " + entry.getKey());
  26. System.out.println("Value: " + entry.getValue());
  27. }
  28. }
  29. }

输出

  1. Key: 150.0
  2. Value: Sabrina
  3. Key: 140.0
  4. Value: Mark
  5. Key: 130.0
  6. Value: Michael
  7. Key: 120.0
  8. Value: John
  9. Key: 110.0
  10. Value: Rachel
  11. Key: 105.0
  12. Value: Caitlyn
  13. Key: 100.0
  14. Value: Hill

走你,再简单不过了吧? 我们所做的只是覆盖比较方法,而不是x => y(升序),我们将其更改为y => x(降序)。