Java 中以逆序迭代 TreeMap
TreeMap 是 Java 集合框架 中的一个类,它实现了 NavigableMap 接口。它以树形结构存储映射中的元素,并提供了一种有效的替代方案,以排序顺序存储键值对。换句话说,它始终按升序返回元素。
然而,Java 提供了几种方法以降序迭代 TreeMap。在本文中,我们将探讨以逆序迭代 TreeMap 的方法。
如何以逆序迭代 TreeMap?
在 Java 中,我们可以使用以下方法以逆序打印 TreeMap 的元素
-
使用 TreeMap.descendingMap() 方法
-
使用 TreeMap.descendingKeySet() 方法
-
使用 Collections.reverseOrder() 方法
让我们通过示例程序逐一讨论它们。
使用 TreeMap.descendingMap() 方法
在 Java 中,TreeMap.descendingMap() 方法返回映射中包含的映射的逆序视图。降序映射由原始映射支持,因此对原始映射的更改会反映在降序映射中,反之亦然。
示例
在此示例中,我们将使用内置方法 TreeMap.descendingMap() 以逆序迭代 TreeMap。为此,我们将首先定义一个 TreeMap,然后将其元素以逆序存储到另一个映射中。
import java.util.*; public class Example1 { public static void main(String[] args) { // creating a TreeMap TreeMap<String, Integer> TrMap = new TreeMap<>(); // Adding elements in the map TrMap.put("Backpack", 4000); TrMap.put("Desktop", 3000); TrMap.put("Keypad", 1500); TrMap.put("Watch", 2000); TrMap.put("Pen drive", 2500); // storing the elements of the map in descending order Map<String, Integer> newMap = TrMap.descendingMap(); // printing the details of map System.out.println("Elements of the map in Reverse Order: "); // iterating through the map for (String unKey : newMap.keySet()) { // printing details of map in reverse order System.out.println("Item: " + unKey + ", Price: " + newMap.get(unKey)); } } }
上述代码的输出如下所示:
Elements of the map in Reverse Order: Item: Watch, Price: 2000 Item: Pen drive, Price: 2500 Item: Keypad, Price: 1500 Item: Desktop, Price: 3000 Item: Backpack, Price: 4000
使用 TreeMap.descendingKeySet() 方法
Java TreeMap descendingKeySet() 方法用于返回此映射中包含的键的逆序 NavigableSet 视图。该集合的迭代器按降序返回键。
示例
在以下示例中,我们将使用内置方法 TreeMap.descendingKeySet() 以逆序迭代 TreeMap。对于此操作,我们不会像在前面的示例中那样创建映射,而是创建一个集合,该集合将以逆序存储映射的键。此外,使用这些键,我们将获得相应的 value。
import java.util.*; public class Example2 { public static void main(String[] args) { // creating a TreeMap TreeMap<Integer, String> TrMap = new TreeMap<>(); // Adding elements in the map TrMap.put(40, "Backpack"); TrMap.put(12, "Desktop"); TrMap.put(150, "Keypad"); TrMap.put(125, "Watch"); TrMap.put(250, "Pen drive"); // retrieving the keys in reverse order Set<Integer> keys = TrMap.descendingKeySet(); // printing the details of map System.out.println("Elements of the map in Reverse Order: "); // iterating through the map for (Integer unKey : keys) { // printing details of map in reverse order System.out.println("Item: " + TrMap.get(unKey) + ", Quantity: " + unKey); } } }
此代码将产生以下结果:
Elements of the map in Reverse Order: Item: Pen drive, Quantity: 250 Item: Keypad, Quantity: 150 Item: Watch, Quantity: 125 Item: Backpack, Quantity: 40 Item: Desktop, Quantity: 12
使用 Collections.reverseOrder() 方法
Java Collections reverseOrder() 方法用于获取一个比较器,该比较器对实现 Comparable 接口的对象集合强加自然排序的逆序。
示例
这是以逆序获取 TreeMap 元素的另一个示例。我们只需要将 Collections.reverseOrder() 方法传递给 TreeMap 的构造函数,该构造函数将以逆序返回 TreeMap 集合的元素。
import java.util.*; public class Example3 { public static void main(String[] args) { // creating a TreeMap by passing Collections.reverseOrder() TreeMap<String, Integer> TrMap = new TreeMap<>(Collections.reverseOrder()); // Adding elements in the map TrMap.put("Kurti", 4000); TrMap.put("Shirt", 3000); TrMap.put("TShirt", 1500); TrMap.put("Watch", 2000); TrMap.put("Perfume", 2500); // printing the details of map System.out.println("Elements of the map in Reverse Order: "); // iterating through the map for (String unKey : TrMap.keySet()) { // printing details of map in reverse order System.out.println("Item: " + unKey + ", Price: " + TrMap.get(unKey)); } } }
上述代码将显示以下输出:
Elements of the map in Reverse Order: Item: Watch, Price: 2000 Item: TShirt, Price: 1500 Item: Shirt, Price: 3000 Item: Perfume, Price: 2500 Item: Kurti, Price: 4000
结论
我们从定义 TreeMap 开始本文,在下一节中,我们讨论了如何以逆序迭代 TreeMap。对于此操作,我们使用了三种不同的内置方法:descendingMap()、descendingKeySet() 和 Collections.reverseOrder()。