如何在 Java 中以逆序创建 TreeMap?


在本文中,我们将学习如何在 Java 中以逆序创建 TreeMap。首先,我们需要了解 **TreeMap**。Java 中的 **TreeMap** 是一个实现 **SortedMap** 接口的类,该接口扩展了 Map 接口。它是一个存储键值对并根据其自然顺序或创建过程中提供的自定义 Comparator 对其进行组织的集合。

这种方法为添加、删除和从 TreeMap 中检索元素等常见操作提供了 **高效的性能**。它具有 **平均时间复杂度** **O(log n)**,确保了高效的执行。

创建 TreeMap 的语法

TreeMap(Map<? extends K,? extends V> m)  

此方法用于通过添加来自 'm' 的条目来初始化 TreeMap。条目将根据键的自然顺序进行排序。

方法

**TreeMap** 的默认行为是根据键按升序对元素进行排序。但是,通过使用 Java 中的 **Collections.reverseOrder()** 方法,我们可以创建一个以 **逆序** 维护元素的 TreeMap,使我们能够根据键按降序显示它们。

Collections.reverseOrder()

**reverseOrder()** 方法返回一个 Comparator,可用于根据给定的 Comparator 以逆序对集合或列表进行排序。此方法允许我们使用自定义比较器轻松地将元素排列为降序。

语法

public static  Comparator reverseOrder()

输入

tm.put("1", "Welcome");
tm.put("2", "to");
tm.put("3", "the");
tm.put("4", "Tutorials");
tm.put("5", "Point");

输出

// The goal is to print the elements in the reverse order of when they were inserted
5: Point
4: Tutorials
3: the
2: to
1: Welcome

示例

//The following code demonstrates how to iterate through a TreeMap in reverse order in Java.

import java.util.*;

public class Testing {
   public static void main(String args[]){
      //Creating a tree Map
      Map<String, String> tm =
      new TreeMap<String, String>(Collections.reverseOrder());

      // Use put() method to insert elements into a treemap
      tm.put("1", "Welcome");
      tm.put("2", "to");
      tm.put("3", "the");
      tm.put("4", "Tutorials");
      tm.put("5", "Point");

      // Traversing and printing the elements in map
      for(Map.Entry<String,String> me: tm.entrySet()){
         System.out.println(me.getKey() + " : " + me.getValue());
      }
   }
}

输出

5 : Point
4 : Tutorials
3 : the
2 : to
1 : Welcome

示例中的元素根据其键以逆序显示。

在这个例子中,我们创建了一个名为 Person 的类,它包含两个属性,例如姓名和年龄。在这里,我们将创建一个 TreeMap,其中键为 Integer,值为 Person 对象,并以逆序显示它们。

输入

treeMap.put(1, new Person("Hari", 25));
treeMap.put(2, new Person("Revanth", 30));
treeMap.put(3, new Person("Mohan", 35));
t  

输出

David (40 years old) => Key: 4
Charlie (35 years old) => Key: 3
Bob (30 years old) => Key: 2
Alice (25 years old) => Key: 1  

下面的程序帮助我们遍历上述示例中的 TreeMap 以实现逆序遍历 -

示例

//The code snippet below illustrates how to traverse a TreeMap in reverse order using Java.
import java.util.*;

class PersonDetails {
   private String person_name;
   private int person_age;

   public PersonDetails(String name, int age) {
      this.person_name = name;
      this.person_age = age;
   }

   public String getName() {
      return person_name;
   }

   public int getAge() {
      return person_age;
   }

   @Override
   public String toString() {
      return person_name + " (" + person_age + " years old)";
   }
}

public class Testing {
   public static void main(String[] args) {
      // Create a TreeMap with Integer as Key and value as Person(Name,age)
      TreeMap<Integer, PersonDetails> tm = new TreeMap<>(Collections.reverseOrder());

      // Use put() method to insert elements into a treemap

      tm.put(1, new PersonDetails("Alice", 25));
      tm.put(2, new PersonDetails("Bob", 30));
      tm.put(3, new PersonDetails("Charlie", 35));
      tm.put(4, new PersonDetails("David", 40));

      // Traversing and printing the elements in map
      for (Map.Entry<Integer, PersonDetails> me : tm.entrySet()) {
         System.out.println(me.getValue() + " => Key: " + me.getKey());
      }
   }
}

输出

David (40 years old) => Key: 4
Charlie (35 years old) => Key: 3
Bob (30 years old) => Key: 2
Alice (25 years old) => Key: 1

在这个例子中,我们创建了一个名为 Product 的类,它包含两个属性,例如名称和价格。在这里,我们将创建一个 TreeMap,其中键为 product_name,值为 product_price,并以逆序显示它们。

输入

tm.put("Product A", 9.99);
tm.put("Product B", 5.99);
tm.put("Product C", 12.49);
tm.put("Product D", 7.99);
tm.put("Product E", 3.99);

输出

Product E => $3.99
Product D => $7.99
Product C => $12.49
Product B => $5.99
Product A => $9.99

示例

//The code snippet below illustrates how to traverse a TreeMap in reverse order using Java.

import java.util.*;

class ProductDetails {
   private String product_name;
   private double product_price;

   public ProductDetails(String name, double price) {
      this.product_name = name;
      this.product_price = price;
   }

   public String getName() {
      return product_name;
   }

   public double getPrice() {
      return product_price;
   }

   @Override
   public String toString() {
      return product_name + " ($" + product_price + ")";
   }
}

public class Testing {
   public static void main(String[] args) {
      // Create a TreeMap with key as product_name and value as product_price
      TreeMap<String, Double> tm= new TreeMap<>(Collections.reverseOrder());

      // Use put() method to insert elements into a treemap
      tm.put("Product A", 9.99);
      tm.put("Product B", 5.99);
      tm.put("Product C", 12.49);
      tm.put("Product D", 7.99);
      tm.put("Product E", 3.99);

      // Print the TreeMap
      for (Map.Entry<String, Double> me : tm.entrySet()) {
         System.out.println(me.getKey() + " => $" + me.getValue());
      }
   }
}

输出

Product E => $3.99
Product D => $7.99
Product C => $12.49
Product B => $5.99
Product A => $9.99

结论

在本文中,我们探讨了通过使用 **reverseOrder()** 方法以逆序创建 TreeMap 的过程,并且我们已经看到了几个如何使用此 reverseOder() 方法来执行此任务的示例。

更新于: 2023年10月16日

1K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告