如何在 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+ 閱讀量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.