Core Java Tutorial -- SortedMap 2022-05-28 00:50 329阅读 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
相关 Core Java Tutorial -- TreeSet Java TreeSet 是 `java.util.SortedSet` 的最流行的实现。SortedSet 是继承 `java.util.Set` 的接口。Java Sort 忘是亡心i/ 2022年05月29日 07:39/ 0 赞/ 77 阅读
相关 Core Java Tutorial -- HashSet Java HashSet 是 Set 接口最流行的实现。 `java.util.HashSet` 由一个`HashMap` 支持。`HashSet` 继承 `AbstractS 待我称王封你为后i/ 2022年05月29日 07:39/ 0 赞/ 164 阅读
相关 Core Java Tutorial -- Set Java Set 是不包含重复元素(或对象)的集合。Java Set 是一个 extends 了 Collection 接口的接口。与 List 不同,Java Set 不是一 短命女/ 2022年05月29日 07:29/ 0 赞/ 68 阅读
相关 Core Java Tutorial -- LinkedList Java LinkedList 是 List 和 Deque 接口的实现。它是经常使用的 List 实现类之一。 它 extends 了 AbstractSequential 末蓝、/ 2022年05月29日 07:23/ 0 赞/ 144 阅读
相关 Core Java Tutorial -- ArrayList Java ArrayList 是最广泛使用的 Collection 类。`java.util.ArrayList` 类实现类了 `java.util.List` 接口。Java 妖狐艹你老母/ 2022年05月29日 07:14/ 0 赞/ 140 阅读
相关 Core Java Tutorial -- Deadlock Java 中的死锁是一种编程情况,两个或更多的线程永远被阻塞。至少有两个线程和两个或更多资源出现 Java 死锁情况。在这里我写了一个简单的程序,它会导致 Java 死锁情况, 你的名字/ 2022年05月28日 07:20/ 0 赞/ 131 阅读
相关 Core Java Tutorial -- Iterator 在本文中我们将讨论一些关于 Java Enumeration 的基础,深入讨论 Java 迭代器。由于 Enumeration 接口被弃用了,所以不建议在应用中使用。 1. 我会带着你远行/ 2022年05月28日 00:57/ 0 赞/ 139 阅读
相关 Core Java Tutorial -- Queue Java Queue 是 `java.util` 包中的一个接口,用于扩展 `java.util.Collection` 接口。就像 Java List 一样,Java Que 妖狐艹你老母/ 2022年05月28日 00:54/ 0 赞/ 136 阅读
相关 Core Java Tutorial -- TreeMap Java TreeMap 是一个 [Map][] 的实现,它是 [Java 集合框架][Java]的一部分。 1. Java TreeMap 迷南。/ 2022年05月28日 00:52/ 0 赞/ 185 阅读
相关 Core Java Tutorial -- SortedMap Java SortedMap 是一个提供了在键上完全排序的 Map。 1. Java SortedMap 1. Java SortedMa 朱雀/ 2022年05月28日 00:50/ 0 赞/ 330 阅读
还没有评论,来说两句吧...