当前位置: 首页 > article >正文

Java 查询最大最小值 详解

在 Java 中,查询最大值和最小值是常见需求。以下将详细介绍 最大值和最小值的查询方法,包括适用于数组、集合、以及更复杂的数据结构的解决方案。


1. 使用 Math 类

Java 提供了 Math.maxMath.min 方法,可用于直接比较两个值。

适用场景

  • 比较两个或少量的值。

示例代码

public class MaxMinWithMath {
    public static void main(String[] args) {
        int a = 5, b = 10;
        System.out.println("最大值: " + Math.max(a, b)); // 输出 10
        System.out.println("最小值: " + Math.min(a, b)); // 输出 5

        double x = 2.5, y = 7.8;
        System.out.println("最大值: " + Math.max(x, y)); // 输出 7.8
        System.out.println("最小值: " + Math.min(x, y)); // 输出 2.5
    }
}

优点

  • 简单易用。

缺点

  • 只能比较两个值,处理数组或集合需要嵌套调用。

2. 遍历法(适用于数组)

通过遍历数组,可以找到其最大值和最小值。这是最常见的算法。

适用场景

  • 查询数组的最大值和最小值。

示例代码

public class MaxMinInArray {
    public static void main(String[] args) {
        int[] nums = {3, 7, 2, 9, 4};

        int max = nums[0]; // 假设第一个值为最大值
        int min = nums[0]; // 假设第一个值为最小值

        for (int num : nums) {
            if (num > max) max = num; // 更新最大值
            if (num < min) min = num; // 更新最小值
        }

        System.out.println("最大值: " + max); // 输出 9
        System.out.println("最小值: " + min); // 输出 2
    }
}

优点

  • 简单高效,时间复杂度为 O ( n ) O(n) O(n)

缺点

  • 手动实现逻辑,代码量略多。

3. 使用 Arrays 类

Java 的 java.util.Arrays 提供了对数组操作的工具,可以通过排序找到最大值和最小值。

适用场景

  • 数组可以被排序且不介意改变原数组。

示例代码

import java.util.Arrays;

public class MaxMinUsingArrays {
    public static void main(String[] args) {
        int[] nums = {3, 7, 2, 9, 4};

        Arrays.sort(nums); // 对数组进行排序
        int min = nums[0]; // 第一个元素是最小值
        int max = nums[nums.length - 1]; // 最后一个元素是最大值

        System.out.println("最大值: " + max); // 输出 9
        System.out.println("最小值: " + min); // 输出 2
    }
}

优点

  • 简洁。

缺点

  • 排序的时间复杂度为 O ( n log ⁡ n ) O(n \log n) O(nlogn),比简单遍历慢。
  • 改变了原数组顺序。

4. 使用 Collections 类

java.util.Collections 提供了对集合操作的工具方法,可轻松找到 List 的最大值和最小值。

适用场景

  • 操作 List 类型的集合。

示例代码

import java.util.Collections;
import java.util.Arrays;
import java.util.List;

public class MaxMinUsingCollections {
    public static void main(String[] args) {
        List<Integer> nums = Arrays.asList(3, 7, 2, 9, 4);

        int max = Collections.max(nums); // 找最大值
        int min = Collections.min(nums); // 找最小值

        System.out.println("最大值: " + max); // 输出 9
        System.out.println("最小值: " + min); // 输出 2
    }
}

优点

  • 简洁,操作简单。
  • 不需要手动实现遍历逻辑。

缺点

  • 仅适用于 List 类型的数据。

5. 使用 Java Streams

Java 8 引入了 Streams API,可用于高效查询最大值和最小值。

适用场景

  • 操作数组或集合时,需要更简洁的代码。

示例代码:数组

import java.util.stream.IntStream;

public class MaxMinWithStreams {
    public static void main(String[] args) {
        int[] nums = {3, 7, 2, 9, 4};

        int max = IntStream.of(nums).max().orElse(Integer.MIN_VALUE);
        int min = IntStream.of(nums).min().orElse(Integer.MAX_VALUE);

        System.out.println("最大值: " + max); // 输出 9
        System.out.println("最小值: " + min); // 输出 2
    }
}

示例代码:集合

import java.util.Arrays;
import java.util.List;

public class MaxMinInListStreams {
    public static void main(String[] args) {
        List<Integer> nums = Arrays.asList(3, 7, 2, 9, 4);

        int max = nums.stream().max(Integer::compareTo).orElse(Integer.MIN_VALUE);
        int min = nums.stream().min(Integer::compareTo).orElse(Integer.MAX_VALUE);

        System.out.println("最大值: " + max); // 输出 9
        System.out.println("最小值: " + min); // 输出 2
    }
}

优点

  • 支持并行流操作,处理大规模数据时效率更高。
  • 更加现代化和简洁。

缺点

  • 需要掌握 Streams API 的用法。

6. 应对特殊情况

(1) 空数组或集合

  • 如果数组或集合为空,查询最大最小值会抛出异常,需特别处理。
  • 使用 OptionalorElse 提供默认值。
示例代码
import java.util.OptionalInt;

public class HandleEmptyArray {
    public static void main(String[] args) {
        int[] nums = {};

        int max = IntStream.of(nums).max().orElse(Integer.MIN_VALUE); // 默认值
        int min = IntStream.of(nums).min().orElse(Integer.MAX_VALUE); // 默认值

        System.out.println("最大值: " + max); // 输出 Integer.MIN_VALUE
        System.out.println("最小值: " + min); // 输出 Integer.MAX_VALUE
    }
}

(2) 所有值相等

当所有值相等时,最大值和最小值相等。

示例代码
int[] nums = {5, 5, 5, 5};

int max = IntStream.of(nums).max().orElse(Integer.MIN_VALUE);
int min = IntStream.of(nums).min().orElse(Integer.MAX_VALUE);

System.out.println("最大值: " + max); // 输出 5
System.out.println("最小值: " + min); // 输出 5

7. 方法对比

方法优点缺点
Math.max / Math.min简单直接,适合少量数字比较无法直接处理数组或集合
遍历法高效( O ( n ) O(n) O(n)),适合数组需要手动实现逻辑
Arrays.sort简洁,适合小型数组修改原数组,效率低于遍历法
Collections.max / min简洁,专为 List 提供不支持数组,需先转换为 List
Streams现代化、支持并行流写法较复杂,依赖 Java 8 及以上版本

8. 总结

  1. 少量值的比较:使用 Math.maxMath.min
  2. 数组的最大最小值
    • 使用 遍历法(高效)。
    • Streams API(简洁)。
  3. 集合的最大最小值
    • 使用 Collections.max/minStreams API
  4. 大规模数据
    • 优先使用 Streams 并行流,能充分利用多核性能。

选择合适的方法可以提升代码的可读性和性能。


http://www.kler.cn/a/409028.html

相关文章:

  • Spring 框架七大模块(Java EE 学习笔记03)
  • 近源渗透|HID ATTACK从0到1
  • 前端速通(CSS)
  • 如何定位 Mysql 负载高
  • stable-diffusion-webui在conda pycharm中运行
  • Linux网络——网络层
  • C语言教程指针笔记整理(三)
  • 如何选择服务器
  • C++之旅-set和map掌握篇
  • 深度优先搜索题目合集
  • Java语言程序设计 选填题知识点总结
  • Linux 正则表达式(basic and extened)
  • uiautomator案例
  • Excel中超链接打开文件时报错 “打开此文件的应用程序没有注册“ 的一个解决办法
  • C#构建一个简单的前馈神经网络
  • linux命令之openssl用法
  • 重绘重排、CSS树DOM树渲染树、动画加速 ✅
  • 原生Android调用uniapp项目中的方法
  • 引用类型的局部变量线程安全问题分析——以多线程对方法局部变量List类型对象实例的add、remove操作为例
  • node.js中使用express.static()托管静态资源
  • Java项目实战II基于微信小程序的南宁周边乡村游平台(开发文档+数据库+源码)
  • 工业边缘计算网关在生产设备数据采集中的应用
  • C51数字时钟/日历---LCD1602液晶显示屏
  • 线性代数的发展简史
  • 7-10 解一元二次方程
  • Android 数据处理 ------ BigDecimal