在 Java 中查詢陣列元素的索引


在使用 Java 中的陣列時,經常需要找到特定元素在陣列中的索引。此索引可用於根據需要訪問或操作元素。在本文中,我們將探討在 Java 中查詢陣列元素索引的不同方法,以及它們各自的演算法和示例程式碼。

語法

要查詢 Java 中陣列元素的索引,語法通常包括遍歷陣列並將每個元素與指定值進行比較。找到匹配項後,將返回索引。基本語法如下所示 -

public static int findIndex(int[] array, int element) {
   for (int i = 0; i < array.length; i++) {
      if (array[i] == element) {
         return i;
      }
   }
   return -1; // Element not found
}

語法解釋

  • int[] array − 我們想要查詢元素索引的陣列。

  • int element − 我們想要查詢索引的元素。

  • for 迴圈 − 遍歷陣列中的每個元素。

  • if 語句 − 將每個元素與所需的元素進行比較。

  • return i − 如果找到匹配項,則返回元素的索引。

  • return -1 − 如果陣列中未找到該元素,則返回 -1。

方法 1

演算法

  • 從第一個元素開始迭代陣列。

  • 將每個元素與所需的元素進行比較。

  • 如果找到匹配項,則返回元素的索引。

  • 如果到達陣列的末尾而沒有找到匹配項,則返回 -1。

示例

public class ArrayIndexFinder {

   public static int findIndexApproach1(int[] array, int element) {
      for (int i = 0; i < array.length; i++) {
         if (array[i] == element) {
            return i;
         }
      }
      return -1; // Element not found
   }

   public static void main(String[] args) {
      int[] array = {1, 2, 3, 4, 5};
      int element = 3;
      int index = findIndexApproach1(array, element);
      System.out.println("Index of element " + element + ": " + index);
   }
}

輸出

Index of element 3: 2

解釋

在這種方法中,我們使用簡單的 for 迴圈來遍歷陣列。在迴圈內,我們使用 if 語句將每個元素與所需的元素進行比較。如果找到匹配項,我們返回該元素的索引。如果到達陣列的末尾而沒有找到匹配項,我們返回 -1 以指示未找到該元素。

方法 2

演算法

  • 使用 Java 標準庫中的 Arrays 類來搜尋陣列中的元素。

  • 如果找到匹配項,則返回元素的索引。

  • 如果未找到該元素,則 binarySearch 方法將返回一個負值。使用按位取反 (~) 運算子將此值轉換為插入點,並減去 1 以獲取元素將被插入的索引。

  • 如果未找到元素,則將返回 -1。

示例

import java.util.Arrays;

public class ArrayIndexFinder {

   public static int findIndexApproach2(int[] array, int element) {
      int index = Arrays.binarySearch(array, element);
      if (index >= 0) {
         return index;
      } else {
         return -1; // Element not found
      }
   }

   public static void main(String[] args) {
      int[] array = {1, 2, 3, 4, 5};
      int element = 3;
      int index = findIndexApproach2(array, element);
      System.out.println("Index of element " + element + ": " + index);
   }
}

輸出

Index of element 3: 2

解釋

此方法使用 Java 標準庫中 Arrays 類中的 binarySearch 方法。如果找到該元素,則該方法將直接返回其索引。如果未找到該元素,則該方法將返回一個負值。我們使用按位取反運算子 (~) 將此負值轉換為插入點,並減去 1。最後,如果未找到該元素,我們返回 -1。

方法 3

演算法

  • 使用 Java 標準庫中的 ArrayList 類將陣列轉換為 ArrayList。

  • 使用 ArrayList 類的 indexOf 方法查詢元素的索引。

  • 如果找到該元素,則返回其索引。

  • 如果未找到該元素,則 indexOf 方法將返回 -1。

示例

import java.util.ArrayList;
import java.util.List;

public class ArrayIndexFinder {

   public static int findIndexApproach3(int[] array, int element) {
      List<Integer> list = new ArrayList<>();
      for (int i : array) {
         list.add(i);
      }
      return list.indexOf(element);
   }

   public static void main(String[] args) {
      int[] array = {1, 2, 3, 4, 5};
      int element = 4;
      int index = findIndexApproach3(array, element);
      System.out.println("Index of element " + element + ": " + index);
   }
}

輸出

Index of element 4: 3

解釋

在此方法中,我們首先透過遍歷陣列並將每個元素新增到列表中來將陣列轉換為 ArrayList。然後,使用 ArrayList 類的 indexOf 函式確定元素的索引。如果找到該元素,則返回索引。如果找不到該元素,則該方法將返回 -1。

方法 4

演算法

  • 從第一個元素開始迭代陣列。

  • 使用 while 迴圈將每個元素與所需的元素進行比較。

  • 如果找到匹配項,則返回元素的索引。

  • 如果到達陣列的末尾而沒有找到匹配項,則返回 -1。

示例

public class ArrayIndexFinder {

   public static int findIndexApproach4(int[] array, int element) {
      int i = 0;
      while (i < array.length) {
         if (array[i] == element) {
            return i;
         }
         i++;
      }
      return -1; // Element not found
   }

   public static void main(String[] args) {
      int[] array = {1, 2, 3, 4, 5};
      int element = 5;
      int index = findIndexApproach4(array, element);
      System.out.println("Index of element " + element + ": " + index);
   }
}

輸出

Index of element 5: 4

解釋

在此方法中,我們使用 while 迴圈而不是 for 迴圈來遍歷陣列。在迴圈內,我們使用 if 語句將每個元素與指定的元素進行比較。如果找到匹配項,則返回該元素的索引。如果我們到達陣列的末尾而沒有找到匹配項,則返回 -1。

結論

在本文中,我們探討了在 Java 中查詢陣列元素索引的不同方法。我們討論了四種方法以及它們的演算法,並提供了可執行的程式碼示例。無論您偏好簡單的 for 迴圈、使用 Arrays 類、使用 ArrayList 還是 while 迴圈,您現在都有多種選擇來根據您的特定需求查詢陣列元素的索引。

更新於: 2023-07-31

3K+ 閱讀量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.