如何在 Java 中使用索引获取 TreeMap 的键或值?


Java 的 TreeMap 类实现了 SortedMap 接口,并提供了一个有序的键值映射系统。虽然 TreeMap 主要依赖于键进行检索,但在某些情况下,可能需要进行索引访问 - 但是 TreeMap 中没有直接的方法允许开发人员像 List 或 Array 那样根据索引位置直接检索元素。

一种解决方案是在访问它们各自的索引之前,将您的 TreeMap 键或值转换为 List 或 ArrayList - 这样开发人员就可以获得与 TreeMap 相关的所有好处,并在需要时仍然可以进行索引访问。

Java 中的索引

Java 中的索引表示有序集合(如数组或列表)中的一个元素,其中每个索引表示从零开始的一个位置;索引号从 0 开始,因此任何有序集中第一个元素将占据索引零,第二个元素将占据索引一,依此类推。索引可以通过在方括号表示法中提供其索引值来帮助您访问特定元素。

索引也可用于循环中,以顺序遍历集合元素。数组或集合上的 length() 或 size() 方法有助于识别它们的元素总数以及有效的索引范围,以防止超出该范围并冒出现异常的风险。索引在 Java 编程中发挥着宝贵的作用,因为它们有助于在有序集合中有效地操作和检索元素。

方法

Java 提供了多种方法,允许您快速使用索引查找 TreeMap 的键或值,包括以下方法。

  • 将 TreeMap 的键或值转换为 List 并按索引访问元素

  • 使用迭代和计数器变量查找所需索引处的键或值

将 TreeMap 的键或值转换为 List 并按索引访问元素

首先,创建一个 TreeMap 对象并使用键值对填充它。接下来,使用其构造函数(ArrayList 构造函数)或 addAll() 方法将 TreeMap 的这些键或值转换为 List 对象;这允许基于索引的访问。

创建 List 后,可以使用 get() 通过索引轻松检索元素。只需将您的索引作为参数提供给 get(),它将检索其对应的键或值 - 将此元素分配回变量以供进一步使用!

通过将 TreeMap 的键或值转换为 List 并按索引访问元素,您可以根据其在 TreeMap 条目中的位置检索特定元素。这提供了更大的灵活性,同时使对这些条目的操作可以通过基于索引的访问来实现。

算法

  • 创建一个 TreeMap 对象并使用键值对填充它。

  • 使用其构造函数或 addAll() 方法将 TreeMap 中的键或值转换为数组列表。

  • 构建 List 后,可以使用其索引通过 get() 方法访问元素。

  • 要快速检索索引位置处的键或值,请将该索引作为参数提供给 List 的 get() 方法。

  • 将您刚刚检索到的键或值分配给一个变量以供将来使用。

程序

import java.util.*;

public class TreeMapExample {
   public static void main(String[] args) {
      // Create a TreeMap
      TreeMap<Integer, String> treeMap = new TreeMap<>();
      treeMap.put(1, "Apple");
      treeMap.put(2, "Banana");
      treeMap.put(3, "Orange");

      // Convert keys to a List
      List<Integer> keyList = new ArrayList<>(treeMap.keySet());

      // Access key at index 1
      Integer keyAtIndex1 = keyList.get(1);
      System.out.println("Key at index 1: " + keyAtIndex1);

      // Convert values to a List
      List<String> valueList = new ArrayList<>(treeMap.values());

      // Access value at index 2
      String valueAtIndex2 = valueList.get(2);
      System.out.println("Value at index 2: " + valueAtIndex2);
   }
}

输出

Key at index 1: 2
Value at index 2: Orange

使用迭代和计数器变量查找所需索引处的键或值

首先初始化一个计数器变量,它将在您使用循环遍历 TreeMap 条目时跟踪索引,并在每次迭代时递增其计数器变量。

在循环中,检查计数器变量是否与您的目标索引值匹配,如果匹配,则检索与此当前条目关联的键或值。

使用迭代和计数器变量允许您在 TreeMap 中找到任何所需索引处的任何键或值,提供了一种可访问的方式来根据其位置访问特定元素,从而允许使用基于索引的访问有效地检索 TreeMap 条目。

算法

  • 将计数器变量初始化为 0。

  • 迭代 TreeMap 的所有条目。

  • 对于每个条目

    • 将计数器变量递增 1。

    • 检查该变量是否与您的目标索引匹配。

    • 如果该条目确实与其中一个对应,则检索其键或值并相应地分配它们。

    • 如果已到达目标索引,则立即退出循环。

  • 如果循环在找不到目标索引的情况下完成,则处理任何索引超出范围的情况并相应地采取行动。

  • 根据需要在您的程序中使用获得的键或值。

程序

import java.util.*;

public class TreeMapExample {
   public static void main(String[] args) {
      // Create a TreeMap
      TreeMap<Integer, String> treeMap = new TreeMap<>();
      treeMap.put(1, "Apple");
      treeMap.put(2, "Banana");
      treeMap.put(3, "Orange");

      // Get the desired index (1-based)
      int desiredIndex = 2;

      // Initialize counters
      int keyCount = 0;
      int valueCount = 0;

      // Iterate through the TreeMap
      for (Map.Entry<Integer, String> entry : treeMap.entrySet()) {
         keyCount++;
         valueCount++;

         // Check if the desired index is reached
         if (keyCount == desiredIndex) {
            Integer key = entry.getKey();
            System.out.println("Key at index " + desiredIndex + ": " + key);
         }

         if (valueCount == desiredIndex) {
            String value = entry.getValue();
            System.out.println("Value at index " + desiredIndex + ": " + value);
         }
      }
   }
}

输出

Key at index 2: 2
Value at index 2: Banana

结论

本教程演示了如何使用两种不同的方法在 Java 中使用索引位置检索 TreeMap 的键或值。方法一包括在使用 get() 方法进行直接索引访问之前,将它们转换为 List 或 ArrayList 元素;另一方面,方法二包括使用计数器作为跟踪器迭代 TreeMap,直到到达所需的索引位置 - 这避免了内存使用,但需要迭代直到达到所需的索引。

这两种方法都为开发人员提供了按索引访问 TreeMap 元素的灵活性,允许他们根据其在映射中的位置检索特定的键或值。您最终选择哪种方法取决于您的程序需求以及内存使用和迭代效率等考虑因素?

更新于: 2023-07-25

2K+ 阅读量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告