在陣列中查詢元素

有很多方法可以在陣列中找到值的位置。以下示例片段都假設該陣列是以下之一:

  String[] strings = new String[] { "A", "B", "C" };
  int[] ints = new int[] { 1, 2, 3, 4 };

另外,每個都將 indexindex2 設定為所需元素的索引,或者如果元素不存在則將 -1 設定為 -1

使用 Arrays.binarySearch (僅用於排序陣列)

  int index = Arrays.binarySearch(strings, "A");
  int index2 = Arrays.binarySearch(ints, 1);

使用 Arrays.asList(僅適用於非原始陣列)

  int index = Arrays.asList(strings).indexOf("A");
  int index2 = Arrays.asList(ints).indexOf(1);  // compilation error

使用 Stream

Version >= Java SE 8

  int index = IntStream.range(0, strings.length)
                       .filter(i -> "A".equals(strings[i]))
                       .findFirst()
                       .orElse(-1); // If not present, gives us -1.
  // Similar for an array of primitives

使用迴圈進行線性搜尋

  int index = -1;
  for (int i = 0; i < array.length; i++) {
      if ("A".equals(array[i])) {
          index = i;
          break;
      }            
  }
  // Similar for an array of primitives

使用 org.apache.commons 等第三方庫進行線性搜尋

  int index = org.apache.commons.lang3.ArrayUtils.contains(strings, "A");
  int index2 = org.apache.commons.lang3.ArrayUtils.contains(ints, 1);

注意:使用直接線性搜尋比包裝在列表中更有效。

測試陣列是否包含元素

上面的示例可以通過簡單測試以檢視計算的索引是否大於或等於零來測試陣列是否包含元素。

或者,還有一些更簡潔的變化:

boolean isPresent = Arrays.asList(strings).contains("A");

Version >= Java SE 8

boolean isPresent = Stream<String>.of(strings).anyMatch(x -> "A".equals(x));
boolean isPresent = false;
for (String s : strings) {
    if ("A".equals(s)) {
        isPresent = true;
        break;
    }
}

boolean isPresent = org.apache.commons.lang3.ArrayUtils.contains(ints, 4);