Core Java Tutorial -- SortedMap 2022-05-28 08:50 31阅读 0赞 Java SortedMap 是一个提供了在键上完全排序的 Map。 1. Java SortedMap 1. Java SortedMap Constructors 2. Java SortedMap implementation 3. Java SortedMap Methods Compared to Map # Java SortedMap # Java SortedMap 既可以根据键自然排序进行排序也可以根据在创建 map 时提供的 [Comparator][] 来排序。 如果我们在创建 SortedMap 时不提供任何 [Comparator][] (应该用来接收 map 的键的),map 的所有键元素必须实现 [Comparable 接口][Comparator]来确保排序。 ## Java SortedMap Constructors ## 按照规范,所有通用的 sorted map 都应提供一下标准构造函数: 1. 无参构造函数: 创建一个根据键的自然排序排序的 sorted map。 2. 带有一个 Comparator 类型参数的构造函数:创建一个键根据指定 comparator 排序的 sorted map。 3. 带有一个 Map 类型参数的构造函数:创建一个使用 map 中元素的且根据键的自然排序进行排序的 sorted map。 4. 带有一个 SortedMap 类型参数的构造函数:它应该像复制构造函数一样工作,并使用相同的元素和提供的 sorted map 的相同顺序创建新的 sorted map 。 当然,这是不可能的,因为接口不能像方法那样指定构造函数。 ## Java SortedMap implementation ## TreeMap 是一个广泛使用的 SortedMap 实现。让我们来使用上面提到的不同的构造器创建它的实例: package SortedMap; import java.time.LocalDate; import java.util.SortedMap; import java.util.TreeMap; public class SortedMapTest { public static void main(String[] args) { SortedMap<String, PersonalDetails> personMap = new TreeMap<>(); personMap.put("Dan Brown", new PersonalDetails("Writer", LocalDate.of(1964, 6, 22), "New Hampshire")); personMap.put("Ayn Rand", new PersonalDetails("Writer", LocalDate.of(1905, 2, 2), "Saint Petersburg")); personMap.put("Devdutt Pattanaik", new PersonalDetails("Mythologist", LocalDate.of(1970, 12, 11), "Mumbai")); personMap.keySet().forEach(key -> System.out.println(key + " -> " + personMap.get(key))); } } `PersonalDetails` 实现: package SortedMap; import java.time.LocalDate; public class PersonalDetails { String occupation; LocalDate dataOfBirth; String city; public PersonalDetails(String occupation, LocalDate dataOfBirth, String city) { this.occupation = occupation; this.dataOfBirth = dataOfBirth; this.city = city; } @Override public String toString() { return this.occupation + ", from " + this.city; } } 它将按照其按键的自然顺序打印 map。在这种情况下,键类型是 String,它实现了 Comparable 接口。 输出: Ayn Rand -> Writer, from Saint Petersburg Dan Brown -> Writer, from New Hampshire Devdutt Pattanaik -> Mythologist, from Mumbai 如果我们在构造函数参数中提供 Comparator 实现,而不是无参数构造函数,则输出将具有不同的顺序。让我们写一个 lambda 表达式来提供比较器接口的compareTo 实现。假设我们想按照键的长度按照降序对键进行排序: SortedMap<String, PersonalDetails> personMap = new TreeMap<>((s1, s2) -> s2.length() - s1.length()); 输出: Devdutt Pattanaik -> Mythologist, from Mumbai Dan Brown -> Writer, from New Hampshire Ayn Rand -> Writer, from Saint Petersburg 现在我们将通过传递另一个 Map 对象或不同的 sorted map 来创建一个 sorted map。 输出: Ayn Rand -> Writer, from Saint Petersburg Dan Brown -> Writer, from New Hampshire Devdutt Pattanaik -> Mythologist, from Mumbai Sorted Map constructed using another sorted map: Ayn Rand -> Writer, from Saint Petersburg Dan Brown -> Writer, from New Hampshire Devdutt Pattanaik -> Mythologist, from Mumbai 与 [Map][] 相比,提供了一些额外的方法来使用排序,让我们来看看。 1. `Comparator comparator()`:返回用于在映射中对键进行排序的比较器实例。如果按照自然顺序对键进行排序,则返回 null 。 2. `Set<Map.Entry> entrySet()`:返回 map 中包含的映射的 Set 集合。 3. `K firstKey()`:返回第一个(最低)键。 4. `K lastKey()`:返回最后一个(最高)键。 5. `Set keySet()`:返回包含 map 中所有键的 Set 集合。 6. `SortedMap headMap(K toKey)`:返回键值小于 toKey 的 map 部分的视图。 7. `SortedMap tailMap(K fromKey)`:返回键值大于或等于 fromKey 的 map 部分的视 8. `Collection values()`:返回此映射中包含的值的 Collection 集合视图。 注意,上述方法返回的 Set 时实际 Set 的视图。对这些视图所做的更改也反映在实际的数据结构上。 ## Java SortedMap Implementation ## 让我们来逐个探索这些方法。我们将通过传递一个比较器来创建一个 sorted map,comparator() 方法将返回比较器。 SortedMap sortedMap = new TreeMap(Comparator.reverseOrder()); Comparator comparator = sortedMap.comparator(); 我们来看看 Map 中的映射,它会给我们 Map.Ectry 的 Set 集合。 SortedMap<String, PersonalDetails> sortedMap = new TreeMap<>(Comparator.reverseOrder()); sortedMap.put("Dan Brown", new PersonalDetails("Writer", LocalDate.of(1964, 6, 22), "New Hampshire")); sortedMap.put("Ayn Rand", new PersonalDetails("Writer", LocalDate.of(1905, 2, 2), "Saint Petersburg")); sortedMap.put("Devdutt Pattanaik", new PersonalDetails("Mythologist", LocalDate.of(1970, 12, 11), "Mumbai")); Set<Map.Entry<String, PersonalDetails>> entrySet = sortedMap.entrySet(); entrySet.forEach(entry -> System.out.println(entry.getKey() + "->" + entry.getValue())); 迭代 entrySet 打印: Devdutt Pattanaik->Mythologist, from Mumbai Dan Brown->Writer, from New Hampshire Ayn Rand->Writer, from Saint Petersburg keySet() 将返回键的 Set 集合,而 values() 将但会值的 Collection 集合。 sortedMap.keySet().forEach(System.out::println); Collection<PersonalDetails> values = sortedMap.values(); values.forEach(System.out::println); 此外,还有一些方法可用于获取第一个键,最后一个键,和小于等于或大于等于特定键的 map 部分。 System.out.println("Smallest and largest keys of the map:"); System.out.println(sortedMap.firstKey()); System.out.println(sortedMap.lastKey()); System.out.println("Head map containing keys whose values are less than D."); SortedMap headMap = sortedMap.headMap("D"); headMap.keySet().forEach(System.out::println); System.out.println("Tail map containing keys whose values are greater than or equal to D:"); SortedMap tailMap = sortedMap.tailMap("D"); tailMap.keySet().forEach(System.out::println); [Comparator]: https://www.journaldev.com/780/comparable-and-comparator-in-java-example [Map]: https://blog.csdn.net/Oktfolio/article/details/79646214 文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。
相关 Java SortedMap 接口 Java 集合框架的SortedMap接口提供了对存储在映射中的键的排序。 它扩展了Map 接口。 Java SortedMap 接口扩展了 Map 接口。 实现 ... 朱雀/ 2022年02月19日 19:56/ 0 赞/ 8640 阅读
相关 Java 集合SortedSet&SortedMap讲解 转载自 https://blog.csdn.net/u010126792/article/details/62235628 这次对java集合框架学习中的两个特殊的接口进行介 迈不过友情╰/ 2022年05月27日 09:18/ 0 赞/ 43 阅读
相关 Core Java Tutorial -- SortedMap Java SortedMap 是一个提供了在键上完全排序的 Map。 1. Java SortedMap 1. Java SortedMa 朱雀/ 2022年05月28日 08:50/ 0 赞/ 32 阅读
相关 Core Java Tutorial -- TreeMap Java TreeMap 是一个 [Map][] 的实现,它是 [Java 集合框架][Java]的一部分。 1. Java TreeMap 迷南。/ 2022年05月28日 08:52/ 0 赞/ 28 阅读
相关 Core Java Tutorial -- Thread wait, notify and notifyAll Java 中的 Object 类包含三个最终方法,它们允许线程就资源的锁定状态进行通信。这些方法是 wait()、notify() 和 notifyAll() 。所以今天我们将 我不是女神ヾ/ 2022年05月28日 14:17/ 0 赞/ 20 阅读
相关 Core Java Tutorial -- Daemon Thread Java 中的守护线程可以用于在后台运行一些任务。当我们在 Java 中创建一个线程时,默认情况下它是一个用户线程,如果它正在运行,JVM 将不会终止程序。 Daemon 冷不防/ 2022年05月28日 15:20/ 0 赞/ 5 阅读
相关 Core Java Tutorial -- Thread Local Java ThreadLocal 被用于创建线程局部变量。我们知道一个对象的所有线程共享它的变量,所以这个变量不是线程安全的。我们可以为线程安全使用同步,但如果我们像避免同步, ╰半橙微兮°/ 2022年05月28日 15:20/ 0 赞/ 15 阅读
相关 Core Java Tutorial -- Timer Thread Java `java.util.Timer` 是一个使用程序类,可用于安排将来某个时间执行的线程。Java Timer 类可用于安排一次于运行的任务或定期运行的任务。 Ja ╰+攻爆jí腚メ/ 2022年05月28日 15:20/ 0 赞/ 16 阅读
相关 Core Java Tutorial -- ArrayList Java ArrayList 是最广泛使用的 Collection 类。`java.util.ArrayList` 类实现类了 `java.util.List` 接口。Java 妖狐艹你老母/ 2022年05月29日 15:14/ 0 赞/ 8 阅读
相关 Core Java Tutorial -- HashSet Java HashSet 是 Set 接口最流行的实现。 `java.util.HashSet` 由一个`HashMap` 支持。`HashSet` 继承 `AbstractS 待我称王封你为后i/ 2022年05月29日 15:39/ 0 赞/ 20 阅读
还没有评论,来说两句吧...