Java中如何判断数组是否包含特定值

Java中如何判断数组是否包含特定值

技术背景

在Java开发中,经常会遇到需要判断一个数组是否包含特定值的场景。由于Java数组本身没有提供直接判断元素是否存在的方法,因此需要借助其他工具或编写自定义代码来实现。

实现步骤

1. 使用Arrays.asList方法

1
2
3
4
5
6
7
8
9
10
import java.util.Arrays;

public class ArrayContainsExample {
public static void main(String[] args) {
String[] yourArray = {"AB", "BC", "CD", "AE"};
String yourValue = "AB";
boolean contains = Arrays.asList(yourArray).contains(yourValue);
System.out.println(contains);
}
}

注意:此方法不适用于基本数据类型的数组。

2. 使用Java 8的Stream API

1
2
3
4
5
6
7
8
9
10
import java.util.Arrays;

public class StreamExample {
public static void main(String[] args) {
String[] values = {"AB", "BC", "CD", "AE"};
String target = "AB";
boolean contains = Arrays.stream(values).anyMatch(target::equals);
System.out.println(contains);
}
}

对于intdoublelong类型的数组,可以分别使用IntStreamDoubleStreamLongStream

1
2
3
4
5
6
7
8
9
import java.util.stream.IntStream;

public class PrimitiveStreamExample {
public static void main(String[] args) {
int[] a = {1, 2, 3, 4};
boolean contains = IntStream.of(a).anyMatch(x -> x == 4);
System.out.println(contains);
}
}

3. 使用Set

1
2
3
4
5
6
7
8
9
10
11
12
13
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

public class SetExample {
private static final Set<String> VALUES = new HashSet<>(Arrays.asList("AB", "BC", "CD", "AE"));

public static void main(String[] args) {
String s = "AB";
boolean contains = VALUES.contains(s);
System.out.println(contains);
}
}

从Java 9开始,可以使用Set.of创建不可变集合:

1
2
3
4
5
6
7
8
9
10
11
import java.util.Set;

public class Java9SetExample {
private static final Set<String> VALUES = Set.of("AB", "BC", "CD", "AE");

public static void main(String[] args) {
String s = "AB";
boolean contains = VALUES.contains(s);
System.out.println(contains);
}
}

4. 使用Apache Commons Lang的ArrayUtils

1
2
3
4
5
6
7
8
9
10
import org.apache.commons.lang3.ArrayUtils;

public class ArrayUtilsExample {
public static void main(String[] args) {
String[] fieldsToInclude = {"id", "name", "location"};
if (ArrayUtils.contains(fieldsToInclude, "id")) {
System.out.println("包含该元素");
}
}
}

5. 手动实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class ManualImplementation {
public static <T> boolean contains(final T[] array, final T v) {
for (final T e : array)
if (e == v || v != null && v.equals(e))
return true;
return false;
}

public static void main(String[] args) {
String[] arr = {"AB", "BC", "CD", "AE"};
String target = "AB";
boolean contains = contains(arr, target);
System.out.println(contains);
}
}

6. 使用Arrays.binarySearch(仅适用于已排序数组)

1
2
3
4
5
6
7
8
9
10
11
import java.util.Arrays;

public class BinarySearchExample {
public static void main(String[] args) {
String[] arr = {"AB", "BC", "CD", "AE"};
Arrays.sort(arr);
String target = "AB";
boolean contains = Arrays.binarySearch(arr, target) >= 0;
System.out.println(contains);
}
}

最佳实践

  • 如果数组是静态且元素不重复,优先使用Java 9的Set.of方法,因为它是不可变的,并且查找效率为O(1)。
  • 如果数组是基本数据类型,可以使用Java 8的Stream API。
  • 如果需要频繁进行查找操作,建议将数组转换为Set
  • 如果数组已经排序,使用Arrays.binarySearch方法可以获得较高的查找效率。

常见问题

1. Arrays.asList方法不适用于基本数据类型数组

Arrays.asList方法对于基本数据类型数组会将整个数组作为一个元素处理,而不是将数组中的每个元素作为列表的元素。可以使用Stream API来处理基本数据类型数组。

2. Arrays.binarySearch方法要求数组必须已排序

如果数组未排序,使用Arrays.binarySearch方法会得到错误的结果。在使用该方法之前,需要先对数组进行排序。


Java中如何判断数组是否包含特定值
https://119291.xyz/posts/2025-05-13.java-array-contains-specific-value/
作者
ww
发布于
2025年5月13日
许可协议