HOWTO · Java

在 Java 中檢查陣列是否包含特定值

本文介紹了 Java 中如何判斷一個陣列是否包含某個元素。

陣列是按一定順序排列的元素的系統集合。在內部,陣列元素儲存在連續的記憶體位置。

有多種方法可以搜尋陣列中的元素。不同的方法導致不同的時間和複雜性。下面列出了幾種在陣列中搜尋元素的方法。

使用 Java 中的 array.contains() 方法檢查陣列是否包含特定值

在下面的程式碼塊中,我們需要用一些預定義的值例項化一個陣列 arr。現在,初始化我們要搜尋的字串。

Arrays 是一個具有各種運算元組方法的類。此類包含靜態工廠方法和欄位,它們在搜尋和排序陣列中的元素時非常有用。

asList() 方法是 Arrays 類的靜態方法。它返回從引數中獲取的指定陣列的固定列表。

contains()List 介面中的一個方法。它接受一個元素作為引數,我們將這個引數與列表中存在的元素進行比較。如果指定的元素存在於列表中,則返回布林值 true,在任何一種情況下都返回 false。如果指定元素的型別與此列表不相容,則該方法丟擲 ClassCastException;如果指定值為 null 且此列表不允許空值,則該方法丟擲 NullPointerException

package findInList;

import java.util.Arrays;

public class FindAValueInArray {
  public static void main(String[] args) {
    String[] arr = new String[] {"1", "2", "3"};
    String stringToSearch = "2";
    System.out.println(Arrays.asList(arr).contains(stringToSearch));
  }
}

上述程式的輸出如下。

true

使用 Java 8 流檢查陣列包含特定值

在上面的程式碼塊中,前兩行與第一個程式碼中的類似。這裡我們使用了 Arrays 類的 stream 方法來建立陣列流。此方法返回一個以指定陣列為源的順序流。Stream 類有一個名為 anyMatch() 的函式。該方法將謂詞作為其輸入。

Predicate 是一個函式式介面,它接受一個引數函式並返回一個 Boolean 值。它包含一個 test(T t) 方法,用於評估給定引數的謂詞。如果流的任何元素與提供的謂詞匹配,則返回 true,否則返回 false 值。

package findInList;

import java.util.Arrays;

public class FindAValueInArray {
  public static void main(String[] args) {
    String[] arr = new String[] {"1", "2", "3"};
    String stringToSearch = "2";
    System.out.println(Arrays.stream(arr).anyMatch(s -> s.equals(stringToSearch)));
  }
}

上述程式碼的輸出與第一個程式碼相同。

使用簡單的 for 迴圈檢查陣列是否包含特定值

在下面的程式碼塊中,我們使用傳統的 for 迴圈來迭代陣列。for 迴圈在 expression1 中初始化,計數器值為 0。現在將計數器值與陣列的長度進行比較。如果計數器變數小於定義陣列的長度,則程式碼塊內的語句將被執行。

for 塊內,我們使用 String 類的 equals 方法比較陣列的每個元素。如果狀態評估為真,則使用 break 關鍵字來中斷 for 迴圈的執行。如果沒有找到,程式碼將被執行與陣列中元素數量一樣多的次數。

在迴圈之後,如果在列表中搜尋到元素,則列印語句會將狀態變數的值評估為,否則將列印 false 值。

package findInList;

public class FindAValueInArray {
  public static void main(String[] args) {
    String[] arr = new String[] {"1", "2", "3"};
    String stringToSearch = "2";
    boolean status = false;
    for (int i = 0; i < arr.length; i++) {
      status = arr[i].equals(stringToSearch);
      if (status)
        break;
    }
    System.out.println(status);
  }
}

輸出結果也與第一段程式碼中給出的相同。