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
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
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
JDK1.8新特性引入Stream操作起来容易
使用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
使用 Collections 集合工具类也可以查找最大值和最小值,但在使用之前我们想要将数组(Array)转换成集合(List),实现代码如下:
使用org.apache.commons.lang3.ArrayUtils.toObject 需要导入下面的依赖
<dependency>
<groupId>org.apache.commonsgroupId>
<artifactId>commons-lang3artifactId>
<version>3.5version>
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流的方式操作代码简洁