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 并行流,能充分利用多核性能。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/922776.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

论文模型设置与实验数据:scBERT

Yang, F., Wang, W., Wang, F. et al. scBERT as a large-scale pretrained deep language model for cell type annotation of single-cell RNA-seq data. Nat Mach Intell 4, 852–866 (2022). https://doi.org/10.1038/s42256-022-00534-z 论文地址&#xff1a;scBERT as a…

TCP三次握手的过程是怎样的?

一开始&#xff0c;客户端和服务端都处于CLOSE状态。先是服务端主动监听某个端口&#xff0c;处于LISTEN状态。 &#xff08;1&#xff09;第一次握手 客户端会随机初始化序号&#xff08;client_isn&#xff09;&#xff0c;将此序号填入TCP首部的32位序号字段中&#xff0c…

Java核心知识详解:String类、StringBuffer、数组及日期时间的全面解析

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;Java &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 标题 Java核心知识详解&#xff1a;String类、StringBuffer、数组及日期时间的全面解析 摘要 在Java中…

【MATLAB源码-第218期】基于matlab的北方苍鹰优化算法(NGO)无人机三维路径规划,输出做短路径图和适应度曲线.

操作环境&#xff1a; MATLAB 2022a 1、算法描述 北方苍鹰优化算法&#xff08;Northern Goshawk Optimization&#xff0c;简称NGO&#xff09;是一种新兴的智能优化算法&#xff0c;灵感来源于北方苍鹰的捕猎行为。北方苍鹰是一种敏捷且高效的猛禽&#xff0c;广泛分布于北…

SplatFormer: Point Transformer for Robust3D Gaussian Splatting 论文解读

目录 一、概述 二、相关工作 1、NVI新视角插值 2、稀疏视角重建 3、OOD-NVS 4、无约束重建下的正则化技术 5、基于学习的2D-to-3D模型 6、3D点云处理技术 三、SplatFormer 1、Point Transformer V3 2、特征解码器 3、损失函数 四、数据集 五、实验 一、概述 该论…

Azkaban部署

首先我们需要现在相关的组件&#xff0c;在这里已经给大家准备好了相关的安装包&#xff0c;有需要的可以自行下载。 只需要启动hadoop集群就可以&#xff0c;如果现在你的hive是打开的&#xff0c;那么请你关闭&#xff01;&#xff01;&#xff01; 如果不关会造成证书冲突…

目标检测模型优化与部署

目录 引言数据增强 随机裁剪随机翻转颜色抖动 模型微调 加载预训练模型修改分类器训练模型 损失函数 分类损失回归损失 优化器算法思路 RPN (Region Proposal Network)Fast R-CNN损失函数 部署与应用 使用 Flask 部署使用 Docker 容器化 参考资料 引言 目标检测是计算机视觉…

Charles抓包工具-笔记

摘要 概念&#xff1a; Charles是一款基于 HTTP 协议的代理服务器&#xff0c;通过成为电脑或者浏览器的代理&#xff0c;然后截取请求和请求结果来达到分析抓包的目的。 功能&#xff1a; Charles 是一个功能全面的抓包工具&#xff0c;适用于各种网络调试和优化场景。 它…

java: itext8.05 create pdf

只能调用windows 已安装的字体&#xff0c;这样可以在系统中先预装字体&#xff0c;5.0 可以调用自配文件夹的字体文件。CSharp donetItext8.0 可以调用。 /*** encoding: utf-8* 版权所有 2024 ©涂聚文有限公司 言語成了邀功盡責的功臣&#xff0c;還需要行爲每日來值班…

Kafka 生产者优化与数据处理经验

Kafka&#xff1a;分布式消息系统的核心原理与安装部署-CSDN博客 自定义 Kafka 脚本 kf-use.sh 的解析与功能与应用示例-CSDN博客 Kafka 生产者全面解析&#xff1a;从基础原理到高级实践-CSDN博客 Kafka 生产者优化与数据处理经验-CSDN博客 Kafka 工作流程解析&#xff1a…

C高级学习笔记

……接上文 硬链接和软连接&#xff08;符号链接&#xff09; 硬链接 硬链接文件可以理解为文件的副本&#xff08;可以理解为复制粘贴&#xff09; ln 根据Linux系统分配给文件的inode(ls -li)号进行建立&#xff0c;没有办法跨越文件系统 格式&#xff1a;ln 被链接的文件&am…

Java基于SpringBoot+Vue的藏区特产销售平台

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

vim 分割窗口后,把状态栏给隐藏

一、基本环境 主机MacOs Sonoma 14.7主机终端Iterm2虚拟机Parallels Desktop 20 for Mac Pro Edition 版本 20.0.1 (55659)虚拟机-操作系统Ubuntu 22.04 最小安装 二、分割窗口后的截图&#xff0c;红色线条部分就是状态栏 分割后个布局是&#xff1a;顶部1行高度窗口&#x…

【数据结构】【线性表】栈的基本概念(附c语言源码)

栈的基本概念 讲基本概念还是回到数据结构的三要素&#xff1a;逻辑结构&#xff0c;物理结构和数据运算。 从逻辑结构来讲&#xff0c;栈的各个数据元素之间是通过是一对一的线性连接&#xff0c;因此栈也是属于线性表的一种从物理结构来说&#xff0c;栈可以是顺序存储和顺…

OpenOCD之J-Link下载

1.下载USB Dirver Tool.exe&#xff0c;选择J-Link dirver&#xff0c;替换成WinUSB驱动。&#xff08;⭐USB Dirver Tool工具可将J-Link从WinUSB驱动恢复为默认驱动⭐&#xff09; 下载方式 ①官方网址&#xff1a;https://visualgdb.com/UsbDriverTool/ ②笔者的CSDN链接&…

【JavaEE初阶 — 多线程】定时器的应用及模拟实现

目录 1. 标准库中的定时器 1.1 Timer 的定义 1.2 Timer 的原理 1.3 Timer 的使用 1.4 Timer 的弊端 1.5 ScheduledExecutorService 2. 模拟实现定时器 2.1 实现定时器的步骤 2.1.1 定义类描述任务 定义类描述任务 第一种定义方法 …

ssm168基于jsp的实验室考勤管理系统网页的设计与实现+jsp(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;实验室考勤管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本实验室考勤管…

原生微信小程序在顶部胶囊左侧水平设置自定义导航兼容各种手机模型

无论是在什么手机机型下&#xff0c;自定义的导航都和右侧的胶囊水平一条线上。如图下 以上图iphone12&#xff0c;13PRo 以上图是没有带黑色扇帘的机型 以下是调试器看的wxml的代码展示 注意&#xff1a;红色阔里的是自定义导航&#xff08;或者其他的logo啊&#xff0c;返回之…

Python 获取微博用户信息及作品(完整版)

在当今的社交媒体时代&#xff0c;微博作为一个热门的社交平台&#xff0c;蕴含着海量的用户信息和丰富多样的内容。今天&#xff0c;我将带大家深入了解一段 Python 代码&#xff0c;它能够帮助我们获取微博用户的基本信息以及下载其微博中的相关素材&#xff0c;比如图片等。…

springcloud alibaba之shcedulerx实现分布式锁

文章目录 1、shcedulerx简介2、基于mysq分布式锁实现3、注解方式使用分布式锁4、编码方式使用分布式锁 1、shcedulerx简介 springcloud alibaba shcedulerx看起来有点像xxl job那样的任务调度中间件&#xff0c;其实它是一个分布式锁框架&#xff0c;含有两种实现一种基于DB实…