在 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);
}
}
輸出結果也與第一段程式碼中給出的相同。
Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.
LinkedIn