How do I determine whether an array contains a particular value in Java?

ID : 284

viewed : 124

Tags : javaarraysjava-8java

Top 5 Answer for How do I determine whether an array contains a particular value in Java?

vote vote

93

Arrays.asList(yourArray).contains(yourValue) 

Warning: this doesn't work for arrays of primitives (see the comments).


Since you can now use Streams.

String[] values = {"AB","BC","CD","AE"}; boolean contains = Arrays.stream(values).anyMatch("s"::equals); 

To check whether an array of int, double or long contains a value use IntStream, DoubleStream or LongStream respectively.

Example

int[] a = {1,2,3,4}; boolean contains = IntStream.of(a).anyMatch(x -> x == 4); 
vote vote

87

Concise update for Java SE 9

Reference arrays are bad. For this case we are after a set. Since Java SE 9 we have Set.of.

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

"Given String s, is there a good way of testing whether VALUES contains s?"

VALUES.contains(s) 

O(1).

The right type, immutable, O(1) and concise. Beautiful.*

Original answer details

Just to clear the code up to start with. We have (corrected):

public static final String[] VALUES = new String[] {"AB","BC","CD","AE"}; 

This is a mutable static which FindBugs will tell you is very naughty. Do not modify statics and do not allow other code to do so also. At an absolute minimum, the field should be private:

private static final String[] VALUES = new String[] {"AB","BC","CD","AE"}; 

(Note, you can actually drop the new String[]; bit.)

Reference arrays are still bad and we want a set:

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

(Paranoid people, such as myself, may feel more at ease if this was wrapped in Collections.unmodifiableSet - it could then even be made public.)

(*To be a little more on brand, the collections API is predictably still missing immutable collection types and the syntax is still far too verbose, for my tastes.)

vote vote

78

You can use ArrayUtils.contains from Apache Commons Lang

public static boolean contains(Object[] array, Object objectToFind)

Note that this method returns false if the passed array is null.

There are also methods available for primitive arrays of all kinds.

Example:

String[] fieldsToInclude = { "id", "name", "location" };  if ( ArrayUtils.contains( fieldsToInclude, "id" ) ) {     // Do some stuff. } 
vote vote

70

Just simply implement it by hand:

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; } 

Improvement:

The v != null condition is constant inside the method. It always evaluates to the same Boolean value during the method call. So if the input array is big, it is more efficient to evaluate this condition only once, and we can use a simplified/faster condition inside the for loop based on the result. The improved contains() method:

public static <T> boolean contains2(final T[] array, final T v) {     if (v == null) {         for (final T e : array)             if (e == null)                 return true;     }      else {         for (final T e : array)             if (e == v || v.equals(e))                 return true;     }      return false; } 
vote vote

54

Four Different Ways to Check If an Array Contains a Value

  1. Using List:

    public static boolean useList(String[] arr, String targetValue) {     return Arrays.asList(arr).contains(targetValue); } 
  2. Using Set:

    public static boolean useSet(String[] arr, String targetValue) {     Set<String> set = new HashSet<String>(Arrays.asList(arr));     return set.contains(targetValue); } 
  3. Using a simple loop:

    public static boolean useLoop(String[] arr, String targetValue) {     for (String s: arr) {         if (s.equals(targetValue))             return true;     }     return false; } 
  4. Using Arrays.binarySearch():

    The code below is wrong, it is listed here for completeness. binarySearch() can ONLY be used on sorted arrays. You will find the result is weird below. This is the best option when array is sorted.

    public static boolean binarySearch(String[] arr, String targetValue) {       return Arrays.binarySearch(arr, targetValue) >= 0; } 

Quick Example:

String testValue="test"; String newValueNotInList="newValue"; String[] valueArray = { "this", "is", "java" , "test" }; Arrays.asList(valueArray).contains(testValue); // returns true Arrays.asList(valueArray).contains(newValueNotInList); // returns false 

Top 3 video Explaining How do I determine whether an array contains a particular value in Java?

Related QUESTION?