どうも、ちょげ(@chogetarou)です。
配列(array)の最大値のインデックスを取得する方法を紹介します。
方法

配列(array)の最大値のインデックスする方法は、3つあります。
forループ
1つ目は、forループを使う方法です。
まず、最大値のインデックスを格納する変数を用意します。
次に、配列の要素数でforループします。
ループ変数のインデックスの要素と用意した変数のインデックスの要素を比較します。
そして、大きい要素の方のインデックスを変数に格納します。
//最大値のインデックスを格納する変数
int maxIndex = 0;
//array=任意の配列
for (int i = 0; i < array.length; i++) {
maxIndex = array[i] > array[maxIndex] ? i : maxIndex;
}
上記のforループは、用意した変数に配列(array)の最大値のインデックスを格納します。
使用例
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
int[] numbers = { 3, 5, 0, 13, 9, 2 };
int maxIndex = 0;
for (int i = 0; i < numbers.length; i++) {
maxIndex = numbers[i] > numbers[maxIndex] ? i : maxIndex;
}
System.out.println(maxIndex);
}
}
出力:
3
IntStream
2つ目は、IntStreamを使う方法です。
まず、 IntStreamをインポートします。
import java.util.stream.IntStream;
次に、IntStreamからrange()を呼び出します。
range()の第1引数に0、第2引数に配列の要素数を指定します。
range()からfilter()を呼び出します。
filter()の引数に、引数のインデックスの要素と配列の最大値の比較式を返すラムダ式を指定します。
そして、filter()からfindFirst()を指定します。
//array=配列
int max = Arrays.stream(array).max().getAsInt(); //配列の最大値を取得
int maxIndex = IntStream.range(0, array.length)
.filter(i -> max == array[i])
.findFirst();
上記のfindFirst()は、配列(array)の最大値のインデックスを返します。
もし、配列の最大値が見つからない場合にデフォルト値を返したい場合は、orElse()を使います。
具体的には、findFirst()からorElse()を呼び出し、引数にデフォルト値を指定します。
//array=配列
int max = Arrays.stream(array).max().getAsInt();
int maxIndex = IntStream.range(0, array.length)
.filter(i -> max == array[i])
.findFirst()
.orElse(value); //value=デフォルト値
使用例
import java.util.Arrays;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) throws Exception {
int[] numbers = { 3, 5, 0, 13, 9, 2 };
int max = Arrays.stream(numbers).max().getAsInt();
int maxIndex = IntStream.range(0, numbers.length)
.filter(i -> max == numbers[i])
.findFirst()
.orElse(-1);
System.out.println(maxIndex);
}
}
出力:
3
リスト(ArrayList)
3つ目は、リストを使う方法です。
ArrayListを使う方法は、基本の型(int, string, …)の配列とオブジェクト(Integer, String, …)の配列で異なります。
基本の型の配列
基本の型の配列の場合は、stream()を使います。
まず、 必要なものをインポートします。
import java.util.Arrays;
次に、Arraysからstream()を呼び出し、引数に配列を指定します。
stream()からboxed()、boxed()からtoList()を呼び出します。
そして、toList()からindexOf()を呼び出し、引数に最大値を指定します。
//array=配列
int max = Arrays.stream(array).max().getAsInt(); //配列の最大値を取得
int maxIndex = Arrays.stream(array).boxed().toList().indexOf(max);
上記のindexOf()は、配列(array)の最大値のインデックスを返します。
使用例
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws Exception {
int[] numbers = { 3, 5, 0, 13, 9, 2 };
int max = Arrays.stream(numbers).max().getAsInt();
int maxIndex = Arrays.stream(numbers).boxed().toList().indexOf(max);
System.out.println(maxIndex);
}
}
出力:
3
オブジェクトの配列
オブジェクトの配列の場合は、asList()を使います。
まず、配列をリストに変換します。
まず、asList()を呼び出し、asList()の引数に配列を指定します。
そして、asList()の結果からindexOf()を呼び出します。
indexOf()の引数に配列の最大値を指定します。
indexOf()引数に配列の最大値を指定します。
List<T> list = Arrays.asList(array);
int maxIndex = list.indexOf(Collections.max(list));
上記のindexOf()は、配列(array)の最大値のインデックスを返します。
使用例
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
Integer[] numbers = { 3, 5, 0, 13, 9, 2 };
List<Integer> list = Arrays.asList(numbers);
int maxIndex = list.indexOf(Collections.max(list));
System.out.println(maxIndex);
}
}
出力:
3
まとめ
配列(array)の最大値のインデックスを取得する方法は、次の3つです。
- forループを使う方法
- IntStream()を使う方法
int max = Arrays.stream(array).max().getAsInt();
int maxIndex = IntStream.range(0, array.length).filter(i -> max == array[i]).findFirst();
- リストを使う方法
- 基本型の配列
int max = Arrays.stream(array).max().getAsInt();
int maxIndex = Arrays.stream(array).boxed().toList().indexOf(max); - オブジェクトの配列
List<T> list = Arrays.asList(array);
int maxIndex = list.indexOf(Collections.max(list));
- 基本型の配列
コメント