たとえば、会社の従業員の最高給与、クラスの最高学年、または面接で最大値を見つける問題を照会する場合、この記事では、配列の最大値を照会する5つの方法をリストします。
1.Forループ方式
forループメソッドは手動で最大値を定義し、ループ比較を実行します。配列の要素が最大値より大きい場合は、この配列要素を最大値として使用します。
たとえば、定義された最大値は0です。ループを開始します。配列の添え字は0です。最初の要素2は0より大きいです。このとき、2が最大値として使用され、以下同様に続きます。ループが終了すると、最大値が検出されます。
public static void main(String[] args) {
int[] arr = {
2, 8, 19, 3, 98, 12};
int max = findArrayMax_value(arr);
System.out.println("最大值:" + max);
}
public static int findArrayMax_value(int[] arr) {
//手动定义一个最大值
int max = 0;
//循环遍历
for (int ele : arr) {
//判断数组中每一个元素和最大值的关系
if (ele > max){
//如果数组元素大 就赋值给max
max = ele;
}
}
=============== 一般使用增强for循环 =======================
for (int i = 0; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
return max;
}
結果:最大:98
2.再帰的方法
再帰を使用するには、初期位置と終了位置の2つの位置を定義する必要があります。初期位置の値が終了位置の値より大きい場合、終了位置は1つ前に移動して、通話を続行します。初期位置の値が終了位置の値よりも小さい場合、初期位置は1位置後方に移動され、呼び出しが続行されます。 たとえば、初期位置と終了位置が一致するまで 、次のようになります。配列の初期位置は添え字0になり、arr.length-1の終了位置添え字の6番目の要素は、この時点での初期位置の値を比較します。これは終了位置の値よりも小さいため、ステートメントmaxを実行します。= arr [last]は、メソッドの呼び出しを続行します。今回は、呼び出しの正式なパラメーターが変更されます。これは、2番目の要素と終了位置の値である必要があるため、初期位置は1ビット後方に移動します。 public static void main(String[] args) {
int[] arr = {
2, 8, 19, 3, 98, 12};
//实参分别是数组、初始位置、结束位置、最大值
int max2 = findArrayMax_value2(arr, 0, arr.length - 1, max);
System.out.println("最大值:" + max2);
}
public static int findArrayMax_value2(int[] arr, int head, int last, int max) {
//初始位置与结束位置相等
if (arr[head] == arr[last]) {
return max;
} else {
//初始位置大于结束位置
if (arr[head] > arr[last]) {
//arr[head]赋值给max
max = arr[head];
//继续执行方法 此时结束位置应该向前移一位 继续和初始位置的值比较
return findArrayMax_value2(arr, head, last - 1, max);
} else {
//如果初始位置小于结束位置 arr[last]赋值给max
max = arr[last];
//继续执行方法 此时初始位置应该向后移一位,继续和结束位置的值比较
return findArrayMax_value2(arr, head + 1, last, max);
}
}
}
結果:最大:98
3.Arrays.sort()メソッド
Arrays.sortメソッドは、配列を小さいものから大きいものに並べ替えることができます。並べ替えが完了すると、最後の桁の値が最大値になります。実装コードは次のとおりです。
public static void main(String[] args) {
int[] arr = {
2, 8, 19, 3, 98, 12};
int max3= findArrayMax_value2(arr);
System.out.println("最大值:" + max3);
}
public static int findArrayMax_value3(int[] arr) {
/**
* 源码:
* public static void sort(int[] a) {
* //定义初始位置和结束位置
* DualPivotQuicksort.sort(a, 0, a.length - 1, null, 0, 0);
* }
*/
//返回的是一个升序的数组
Arrays.sort(arr);
//返回结束位置 也就是最大值
return arr[arr.length - 1];
}
コアセンテンス
for (int i = left, j = i; i < right; j = ++i) {
int ai = a[i + 1];
while (ai < a[j]) {
a[j + 1] = a[j];
if (j-- == left) {
break;
}
}
a[j + 1] = ai;
}
結果:最大:98
4.ストリーム
JDK1.8の新機能はStreamを導入し、Streamの作成、中間操作、および操作の終了の
3つのステップでStreamを簡単に使用できます。
public static void main(String[] args) {
int[] arr = {
2, 8, 19, 3, 98, 12};
int max4= findArrayMax_value2(arr);
System.out.println("最大值:" + max4);
}
public static int findArrayMax_value4(int[] arr) {
return Arrays.stream(arr).max().getAsInt();
}
結果:最大:98
5.Collections.max()
コレクションコレクションツールクラスを使用して最大値と最小値を見つけることもできますが、使用する前に配列(配列)をコレクション(リスト)に変換する必要があります。実装コードは次のとおりです:
org.apacheを使用します。 commons.lang3.ArrayUtils.toObject。次の依存関係をインポートします
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.5</version>
</dependency>
public static void main(String[] args) {
int[] arr = {
2, 8, 19, 3, 98, 12};
int max5= findArrayMax_value2(arr);
System.out.println("最大值:" + max5);
}
public static int findArrayMax_value5(int[] arr) {
List<Integer> list = Arrays.asList(org.apache.commons.lang3.ArrayUtils.toObject(arr));
return Collections.max(list);
}
結果:最大:98
コードを簡潔に操作するには、streamメソッドを使用することをお勧めします