Reputation: 118792
Does Java have a built-function to allow me to linearly search for an element in an array or do I have to just use a for loop?
Upvotes: 29
Views: 151175
Reputation: 11986
With Java 8, you can do this:
int[] haystack = {1, 2, 3};
int needle = 3;
boolean found = Arrays.stream(haystack).anyMatch(x -> x == needle);
You'd need to do
boolean found = Arrays.stream(haystack).anyMatch(x -> needle.equals(x));
if you're working with objects.
Upvotes: 16
Reputation: 120198
You might want to consider using a Collection
implementation instead of a flat array.
The Collection
interface defines a contains(Object o)
method, which returns true
/false
.
ArrayList
implementation defines an indexOf(Object o)
, which gives an index, but that method is not on all collection implementations.
Both these methods require proper implementations of the equals()
method, and you probably want a properly implemented hashCode()
method just in case you are using a hash based Collection
(e.g. HashSet
).
Upvotes: 10
Reputation: 37761
There is a contains
method for lists, so you should be able to do:
Arrays.asList(yourArray).contains(yourObject);
Warning: this might not do what you (or I) expect, see Tom's comment below.
Upvotes: 26
Reputation: 29619
You can use one of the many Arrays.binarySearch()
methods. Keep in mind that the array must be sorted first.
Upvotes: 5
Reputation: 308763
Use a for loop. There's nothing built into array. Or switch to a java.util Collection class.
Upvotes: 10