for循环方式手动定义一个最大值,循环比较,如果数组的某一个元素比最大值还要大,就将这个数组元素作为最大值
比如说定义的最大值是0 现在开始循环 数组下标为0的第一个元素2 大于0 此时将2作为最大值,依次类推,循环结束,就查找到最大值
结果:最大值:98
2.递归方式 使用递归需要定义两个位置 初始位置和结束位置 如果初始位置的值大于结束位置的值 结束位置向前移一位 继续调用 如果初始位置的值小于结束位置的值 初始位置向后移一位 继续调用 直到初始位置和结束位置重合结束 比如:现在数组中初始位置的元素下标为0的第一个元素2 和 结束位置下标为arr.length-1的第六个元素比较 此时初始位置的值小于结束位置的值所以执行语句 max=arr[last] 继续调用方法 这次调用形参就发生了改变 应该是第二个元素和结束位置的值比较,所以初始位置向后移一位 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.Stream流JDK1.8新特性引入Stream操作起来容易
使用Stream三步骤:
创建流
中间操作
终止操作
结果:最大值:98
5.Collections.max()使用 Collections 集合工具类也可以查找最大值和最小值,但在使用之前我们想要将数组(Array)转换成集合(List),实现代码如下:
使用org.apache.commons.lang3.ArrayUtils.toObject 需要导入下面的依赖
结果:最大值:98
推荐使用stream流的方式操作代码简洁