For primitive arrays
Starting with Java 8, the general purpose solution for a primitive array arr
, and a value to search val
, is:
public static int indexOf(char[] arr, char val) {
return IntStream.range(0, arr.length).filter(i -> arr[i] == val).findFirst().orElse(-1);
}
This code creates a stream over the indexes of the array with IntStream.range
, filters the indexes to keep only those where the array’s element at that index is equal to the value searched and finally keeps the first one matched with findFirst
. findFirst
returns an OptionalInt
, as it is possible that no matching indexes were found. So we invoke orElse(-1)
to either return the value found or -1
if none were found.
Overloads can be added for int[]
, long[]
, etc. The body of the method will remain the same.
For Object arrays
For object arrays, like String[]
, we could use the same idea and have the filtering step using the equals
method, or Objects.equals
to consider two null
elements equal, instead of ==
.
But we can do it in a simpler manner with:
public static <T> int indexOf(T[] arr, T val) {
return Arrays.asList(arr).indexOf(val);
}
This creates a list wrapper for the input array using Arrays.asList
and searches the index of the element with indexOf
.
This solution does not work for primitive arrays, as shown here: a primitive array like int[]
is not an Object[]
but an Object
; as such, invoking asList
on it creates a list of a single element, which is the given array, not a list of the elements of the array.
Given an array of N elements and an element K, find the index of an array element in Java.
Examples:
Input: a[] = { 5, 4, 6, 1, 3, 2, 7, 8, 9 }, K = 5 Output: 0 Input: a[] = { 5, 4, 6, 1, 3, 2, 7, 8, 9 }, K = 7 Output: 6
An element in an array of N integers can be searched using the below-mentioned methods.
- Linear Search: Doing a linear search in an array, the element can be found in O(N) complexity.
Below is the implementation of the linear-search approach:
Java
import
java.util.*;
public
class
index {
public
static
int
findIndex(
int
arr[],
int
t)
{
if
(arr ==
null
) {
return
-
1
;
}
int
len = arr.length;
int
i =
0
;
while
(i < len) {
if
(arr[i] == t) {
return
i;
}
else
{
i = i +
1
;
}
}
return
-
1
;
}
public
static
void
main(String[] args)
{
int
[] my_array = {
5
,
4
,
6
,
1
,
3
,
2
,
7
,
8
,
9
};
System.out.println(
"Index position of 5 is: "
+ findIndex(my_array,
5
));
System.out.println(
"Index position of 7 is: "
+ findIndex(my_array,
7
));
}
}
Output:
Index position of 5 is: 0 Index position of 7 is: 6
Time Complexity: O(N)
Auxiliary Space: O(1)
2. Binary search: Binary search can also be used to find the index of the array element in an array. But the binary search can only be used if the array is sorted. Java provides us with an inbuilt function which can be found in the Arrays library of Java which will return the index if the element is present, else it returns -1. The complexity will be O(log n).
Below is the implementation of Binary search.
Java
import
java.util.Arrays;
public
class
index {
public
static
int
findIndex(
int
arr[],
int
t)
{
int
index = Arrays.binarySearch(arr, t);
return
(index <
0
) ? -
1
: index;
}
public
static
void
main(String[] args)
{
int
[] my_array = {
1
,
2
,
3
,
4
,
5
,
6
,
7
};
System.out.println(
"Index position of 5 is: "
+ findIndex(my_array,
5
));
System.out.println(
"Index position of 7 is: "
+ findIndex(my_array,
7
));
}
}
Output:
Index position of 5 is: 4 Index position of 7 is: 6
Time Complexity: O(log N)
Auxiliary Space: O(1)
3. Guava: Guava is an open source, Java-based library developed by Google. It provides utility methods for collections, caching, primitives support, concurrency, common annotations, string processing, I/O, and validations. Guava provides several-utility class pertaining to be primitive like Ints for int, Longs for long, Doubles for double etc. Each utility class has an indexOf() method that returns the index of the first appearance of the element in array.
Below is the implementation of Guava.
Java
import
java.util.List;
import
com.google.common.primitives.Ints;
public
class
index {
public
static
int
findIndex(
int
arr[],
int
t)
{
return
Ints.indexOf(arr, t);
}
public
static
void
main(String[] args)
{
int
[] my_array = {
5
,
4
,
6
,
1
,
3
,
2
,
7
,
8
,
9
};
System.out.println(
"Index position of 5 is: "
+ findIndex(my_array,
5
));
System.out.println(
"Index position of 7 is: "
+ findIndex(my_array,
7
));
}
}
Output:
Index position of 5 is: 0 Index position of 7 is: 6
Time Complexity: O(N)
Auxiliary Space: O(1)
4. Stream API: Stream is a new abstract layer introduced in Java 8. Using stream, you can process data in a declarative way similar to SQL statements. The stream represents a sequence of objects from a source, which supports aggregate operations. In order to find the index of an element Stream package provides utility, IntStream. Using the length of an array we can get an IntStream of array indices from 0 to n-1, where n is the length of an array.
Below is the implementation of Stream API approach.
Java
import
java.util.stream.IntStream;
public
class
index {
public
static
int
findIndex(
int
arr[],
int
t)
{
int
len = arr.length;
return
IntStream.range(
0
, len)
.filter(i -> t == arr[i])
.findFirst()
.orElse(-
1
);
}
public
static
void
main(String[] args)
{
int
[] my_array = {
5
,
4
,
6
,
1
,
3
,
2
,
7
,
8
,
9
};
System.out.println(
"Index position of 5 is: "
+ findIndex(my_array,
5
));
System.out.println(
"Index position of 7 is: "
+ findIndex(my_array,
7
));
}
}
Output:
Index position of 5 is: 0 Index position of 7 is: 6
Time Complexity: O(N)
Auxiliary Space: O(1)
5. Using ArrayList
In this approach, we will convert the array into ArrayList, and then we will use the indexOf method of ArrayList to get the index of the element.
Java
import
java.util.ArrayList;
public
class
GFG {
public
static
int
findIndex(
int
arr[],
int
t)
{
ArrayList<Integer> clist =
new
ArrayList<>();
for
(
int
i : arr)
clist.add(i);
return
clist.indexOf(t);
}
public
static
void
main(String[] args)
{
int
[] my_array = {
5
,
4
,
6
,
1
,
3
,
2
,
7
,
8
,
9
};
System.out.println(
"Index position of 5 is: "
+ findIndex(my_array,
5
));
System.out.println(
"Index position of 7 is: "
+ findIndex(my_array,
7
));
}
}
Output:
Index position of 5 is: 0 Index position of 7 is: 6
Time Complexity: O(N)
Auxiliary Space: O(N)
6. Using Recursion
We will use recursion to find the first index of the given element.
Java
public
class
GFG {
public
static
int
index(
int
arr[],
int
t,
int
start)
{
if
(start==arr.length)
return
-
1
;
if
(arr[start]==t)
return
start;
return
index(arr,t,start+
1
);
}
public
static
int
findIndex(
int
arr[],
int
t)
{
return
index(arr,t,
0
);
}
public
static
void
main(String[] args)
{
int
[] my_array = {
5
,
4
,
6
,
1
,
3
,
2
,
7
,
8
,
9
};
System.out.println(
"Index position of 5 is: "
+ findIndex(my_array,
5
));
System.out.println(
"Index position of 7 is: "
+ findIndex(my_array,
7
));
}
}
Output:
Index position of 5 is: 0 Index position of 7 is: 6
Time Complexity: O(N)
Auxiliary Space: O(1)
Last Updated :
20 Feb, 2023
Like Article
Save Article
В этом посте будет обсуждаться, как найти индекс элемента в массиве примитивов или объектов в Java.
Решение должно либо возвращать индекс первого вхождения требуемого элемента, либо -1, если его нет в массиве.
1. Наивное решение — линейный поиск
Наивное решение состоит в том, чтобы выполнить линейный поиск в заданном массиве, чтобы определить, присутствует ли целевой элемент в массиве.
⮚ Для примитивных массивов:
// Метод поиска индекса элемента в примитивном массиве в Java public static int find(int[] a, int target) { for (int i = 0; i < a.length; i++) { if (a[i] == target) { return i; } } return –1; } |
⮚ Для массивов объектов:
// Общий метод для поиска индекса элемента в массиве объектов в Java public static<T> int find(T[] a, T target) { for (int i = 0; i < a.length; i++) { if (target.equals(a[i])) { return i; } } return –1; } |
2. Использование потока Java 8
Мы можем использовать Java 8 Stream для поиска индекса элемента в массиве примитивов и объектов, как показано ниже:
⮚ Для примитивных массивов:
// Метод поиска индекса элемента в примитивном массиве в Java public static int find(int[] a, int target) { return IntStream.range(0, a.length) .filter(i -> target == a[i]) .findFirst() .orElse(–1); // вернуть -1, если цель не найдена } |
⮚ Для массивов объектов:
// Общий метод для поиска индекса элемента в массиве объектов в Java public static<T> int find(T[] a, T target) { return IntStream.range(0, a.length) .filter(i -> target.equals(a[i])) .findFirst() .orElse(–1); // вернуть -1, если цель не найдена } |
3. Преобразовать в список
Идея состоит в том, чтобы преобразовать данный массив в список и использовать List.indexOf()
метод, который возвращает индекс первого вхождения указанного элемента в этом списке.
⮚ Для примитивных массивов:
Как преобразовать примитивный целочисленный массив в List<Integer>?
// Метод поиска индекса элемента в примитивном массиве в Java public static int find(int[] a, int target) { return Arrays.stream(a) // IntStream .boxed() // Stream<Integer> .collect(Collectors.toList()) // List<Integer> .indexOf(target); } |
⮚ Для массивов объектов:
Как преобразовать массив объектов в список?
// Общий метод для поиска индекса элемента в массиве объектов в Java public static<T> int find(T[] a, T target) { return Arrays.asList(a).indexOf(target); } |
4. Бинарный поиск отсортированных массивов
Для отсортированных массивов мы можем использовать Алгоритм бинарного поиска для поиска указанного массива для указанного значения.
⮚ Для примитивных массивов:
// Метод поиска индекса элемента в примитивном массиве в Java public static int find(int[] a, int target) { int index = Arrays.binarySearch(a, target); return (index < 0) ? –1 : index; } |
⮚ Для массивов объектов:
// Общий метод для поиска индекса элемента в массиве объектов в Java public static<T> int find(T[] a, T target) { int index = Arrays.binarySearch(a, target); return (index < 0) ? –1 : index; } |
5. Использование библиотеки Guava
⮚ Для примитивных массивов:
Библиотека Guava предоставляет несколько служебных классов, относящихся к примитивам, например Ints для инт, Longs
надолго, Doubles
на двоих, Floats
для поплавка, Booleans
для логического значения и так далее.
Каждый класс полезности имеет indexOf()
метод, который возвращает индекс первого появления цели в массиве. Мы также можем использовать lastIndexOf()
чтобы вернуть индекс последнего появления цели в массиве.
// Метод поиска индекса элемента в примитивном массиве в Java public static int find(int[] a, int target) { return Ints.indexOf(a, target); } |
⮚ Для массивов объектов:
Guava’s com.google.commons.collect.Iterables класс содержит статический служебный метод indexOf(Iterator, Predicate)
который возвращает индекс первого элемента, удовлетворяющего предоставленному предикату, или -1, если итератор не имеет таких элементов.
// Общий метод для поиска индекса элемента в массиве объектов в Java public static<T> int find(T[] a, T target) { int index = Iterators.indexOf(Iterators.forArray(a), new Predicate<T>() { public boolean apply(T input) { return input.equals(target); } }); return index; } |
Мы также можем использовать com.google.common.base.Predicates класс, предоставляемый Guava, который содержит статические служебные методы, относящиеся к Predicate
экземпляры.
// Общий метод для поиска индекса элемента в массиве объектов в Java public static<T> int find(T[] a, T target) { int index = Iterators.indexOf(Iterators.forArray(a), Predicates.in(Collections.singleton(target))); return index; } |
Для Java 8 и выше мы можем использовать лямбда-выражения:
// Общий метод для поиска индекса элемента в массиве объектов в Java public static<T> int find(T[] a, T target) { return Iterators.indexOf(Iterators.forArray(a), x -> x.equals(target)); } |
6. Использование Apache Commons Lang
Apache Commons Ланг ArrayUtils класс содержит несколько статических служебных методов, которые работают с массивами примитивов или объектов. Он обеспечивает indexOf()
метод, который находит индекс заданного значения в массиве.
⮚ Для примитивных массивов:
// Метод поиска индекса элемента в примитивном массиве в Java public static int find(int[] a, int target) { return ArrayUtils.indexOf(a, target); } |
⮚ Для массивов объектов:
// Общий метод для поиска индекса элемента в массиве объектов в Java public static<T> int find(T[] a, T target) { return ArrayUtils.indexOf(a, target); } |
Вот и все, что касается поиска индекса элемента в массиве в Java.
Чтобы найти индекс искомого элемента в массиве можно в цикле перебрать все элементы и сравнить их с искомым. Если они равны, будет выведен индекс первого подходящего элемента.
// Число, которое будем искать
int num = 3;
// Переменная для хранения индекса,
// найденного числа
int index = -1;
int[] arr = {1, 2, 3, 4, 5};
for (int i = 0; i < arr.length; i++) {
// Если элемент и число равны, то
// сохраняй индекс
if (arr[i] == num) {
index = i;
}
}
System.out.println(index); // => 2
Также можно воспользоваться пакетом org.apache.commons.lang
, методом indexOf()
из класса ArrayUtils
для нахождения индекса элемента.
import org.apache.commons.lang3.ArrayUtils;
public class Example {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
// индекс числа 3
int index = ArrayUtils.indexOf(arr, 3);
System.out.println(index); // => 2
}
}
- Get Index of an Element in an
Integer
Type Array in Java - Get Index of an Array Element Using Java 8 Stream API in Java
- Get Index of an Array Element Using
ArrayUtils.indexOf()
in Java
This article introduces how to get the index of an array in Java using different techniques.
Get Index of an Element in an Integer
Type Array in Java
There is no indexOf()
method for an array in Java, but an ArrayList
comes with this method that returns the index of the specified element. To access the indexOf()
function, we first create an array of Integer
and then convert it to a list using Arrays.asList()
.
Notice that we use a wrapper class Integer
instead of a primitive int
because asList()
only accepts wrapper classes, but they do return the result as a primitive data type. We can check the following example, where we specify the element i.e. 8 to the indexOf()
method to get its index. The result we get from getIndex
is of the int
type.
import java.util.Arrays;
public class ArrayIndexOf {
public static void main(String[] args) {
Integer[] array1 = {2, 4, 6, 8, 10};
int getIndex = Arrays.asList(array1).indexOf(8);
System.out.println("8 is located at "+getIndex+" index");
}
}
Output:
Get Index of an Array Element Using Java 8 Stream API in Java
We can use the Stream API to filter out the array items and get the position of the specified element. IntStream
is an interface that allows a primitive int
to use the Stream functions like filter
and range
.
range()
is a method of IntStream
that returns the elements from the starting position till the end of the array. Now we use filter()
that takes a predicate as an argument. We use i -> elementToFind == array1[i]
as the predicate where i
is the value received from range()
and elementToFind == array1[i]
is the condition to check if the elementToFind
matches with the current element of the array1
.
findFirst()
returns the first element and orElse()
returns -1 if the condition fails.
import java.util.stream.IntStream;
public class ArrayIndexOf {
public static void main(String[] args) {
int[] array1 = {1, 3, 5, 7, 9};
int elementToFind = 3;
int indexOfElement = IntStream.range(0, array1.length).
filter(i -> elementToFind == array1[i]).
findFirst().orElse(-1);
System.out.println("Index of " + elementToFind + " is " + indexOfElement);
}
}
Output:
Get Index of an Array Element Using ArrayUtils.indexOf()
in Java
This example uses the ArrayUtls
class that is included in the Apache Commons Library. We use the below dependency to import the library functions to our project.
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.11</version>
</dependency>
We use the indexOf()
function of the ArrayUtils
class to find the index of the array. indexOf()
accepts two arguments, the first argument is the array, and the second argument is the element of which we want to find the index.
import org.apache.commons.lang3.ArrayUtils;
public class ArrayIndexOf {
public static void main(String[] args) {
int[] array1 = {1, 3, 5, 7, 9};
int elementToFind = 9;
int indexOfElement = ArrayUtils.indexOf(array1, elementToFind);
System.out.println("Index of " + elementToFind + " is " + indexOfElement);
}
}
Output: