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)); // 输出 10System.out.println("最小值: " + Math.min(a, b)); // 输出 5double x = 2.5, y = 7.8;System.out.println("最大值: " + Math.max(x, y)); // 输出 7.8System.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); // 输出 9System.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); // 输出 9System.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); // 输出 9System.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); // 输出 9System.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); // 输出 9System.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_VALUESystem.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.mzph.cn/bicheng/61969.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git标签和分支

在 Git 中&#xff0c;标签&#xff08;Tag&#xff09;和分支&#xff08;Branch&#xff09;都是用来标识代码快照的工具&#xff0c;但是它们有着不同的用途和行为方式。 分支&#xff08;Branch&#xff09; 目的&#xff1a;分支主要用于开发过程中的不同功能或版本的开…

selinux及防火墙

selinux说明 SELinux 是 Security-Enhanced Linux 的缩写&#xff0c;意思是安全强化的 linux 。 SELinux 主要由美国国家安全局&#xff08; NSA &#xff09;开发&#xff0c;当初开发的目的是为了避免资源的误用。 httpd进程标签&#xff08;/usr/share/nginx/html &#…

vue 富文本图片如何拖拽

在Vue项目中实现富文本编辑器&#xff08;如vue-quill-editor&#xff09;的图片拖拽功能&#xff0c;需要结合Quill.js及其相关插件进行配置 安装必要的依赖包&#xff1a; 你需要安装vue-quill-editor作为富文本编辑器的基础组件。为了支持图片拖拽功能&#xff0c;你还需要…

秋招面试基础总结,Java八股文基础(串联知识),四万字大全

目录 值传递和引用传递 静态变量和静态代码块的执行顺序 Java​​​​​​​集合的框架&#xff0c;Set,HashSet,LinkedHashSet这三个底层是什么 多线程篇 Java实现多线程的方式 假设一个线程池&#xff0c;核心线程数是2&#xff0c;最大线程数是3&#xff0c;阻塞队列是4…

MySQL原理简介—12.MySQL主从同步

大纲 1.异步复制为MySQL搭建一套主从复制架构 2.半同步复制为MySQL搭建一套主从复制架构 3.GTID为MySQL搭建一套主从复制架构 4.并行复制降低主从同步延迟或强制读主库 1.异步复制为MySQL搭建一套主从复制架构 (1)MySQL主从复制的原理 (2)搭建主从复制架构的配置 (1)MySQ…

一文了解Spring提供的几种扩展能力

基于 spring bean 的扩展 1. BeanPostProcessor spring 提供的针对 bean 的初始化过程时提供的扩展能力&#xff0c;从方法名也很容易看出&#xff0c;提供的两个方法分别是为 bean 对象提供了初始化之前以及初始化之后的扩展能力。 package com.wyl.conf;import org.spring…

【隐私计算大模型】联邦深度学习之拆分学习Split learning原理及安全风险、应对措施以及在大模型联合训练中的应用案例

Tips&#xff1a;在两方场景下&#xff0c;设计的安全算法&#xff0c;如果存在信息不对等性&#xff0c;那么信息获得更多的一方可以有概率对另一方实施安全性攻击。 1. 拆分学习原理 本文介绍了一种适用于隐私计算场景的深度学习实现方案——拆分学习&#xff0c;又称分割…

Linux 下进程基本概念与状态

文章目录 一、进程的定义二、 描述进程-PCBtask_ struct内容分类 三、 进程状态 一、进程的定义 狭义定义&#xff1a;进程是正在运行的程序的实例&#xff08;an instance of a computer program that is being executed&#xff09;。广义定义&#xff1a;进程是一个具有一定…

k8s1.31版本最新版本集群使用容器镜像仓库Harbor

虚拟机 rocky9.4 linux master node01 node02 已部署k8s集群版本 1.31 方法 一 使用容器部署harbor (1) wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo yum -y install docker-ce systemctl enable docker…

数据库MYSQL——表的设计

文章目录 前言三大范式&#xff1a;几种实体间的关系&#xff1a;一对一关系&#xff1a;一对多关系&#xff1a;多对多关系&#xff1a; 前言 之前的博客中我们讲解的是关于数据库的增删改查与约束的基本操作&#xff0c; 是在已经创建数据库&#xff0c;表之上的操作。 在实…

慢查询优化思路

本文介绍慢查询的优化思路&#xff0c;但不以索引优化作为重点&#xff0c;索引相关的优化可以参考《索引使用原则、索引失效》、《MySQL单表查询时索引使用情况》。 1.应用层面 对于报表类页面&#xff0c;一般涉及到的数据库表较多且数据量大&#xff0c;容易造成接口查询较…

自然语言处理: RAG优化之Embedding模型选型重要依据:mteb/leaderboard榜

本人项目地址大全&#xff1a;Victor94-king/NLP__ManVictor: CSDN of ManVictor git地址&#xff1a;https://github.com/opendatalab/MinerU 写在前面: 笔者更新不易&#xff0c;希望走过路过点个关注和赞&#xff0c;笔芯!!! 写在前面: 笔者更新不易&#xff0c;希望走过路…

使用 Python 快速完成管理系统开发:详细教程

如何使用 Python 快速完成管理系统开发&#xff1a;详细教程 Python 是一门功能强大且易于学习的编程语言&#xff0c;广泛应用于各种开发任务&#xff0c;包括管理系统开发。本文将详细介绍如何使用 Python 快速完成一个简单的管理系统开发&#xff0c;涵盖环境搭建、数据库设…

《生成式 AI》课程 作业6 大语言模型(LLM)的训练微调 Fine Tuning -- part1

资料来自李宏毅老师《生成式 AI》课程&#xff0c;如有侵权请通知下线 Introduction to Generative AI 2024 Spring 该文档主要介绍了国立台湾大学&#xff08;NTU&#xff09;2024 年春季 “生成式人工智能&#xff08;GenAI&#xff09;” 课程的作业 5&#xff08;GenAI HW…

LSA详情与特殊区域

LSA是构成LSDB的重要原材料&#xff0c;在OSPF中发挥很大作用。 报文 通用头部 LS age&#xff1a;LSA寿命&#xff0c;0-3600s Options&#xff1a;可选项 LS type&#xff1a;LSA类型&#xff0c;三要素之一 Link State ID&#xff1a;LSAID 三要素之一 Advertising Ro…

C#构建一个简单的循环神经网络,模拟对话

循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09;是一种用于处理序列数据的神经网络模型。与传统的前馈神经网络不同&#xff0c;RNN具有内部记忆能力&#xff0c;可以捕捉到序列中元素之间的依赖关系。这种特性使得RNN在自然语言处理、语音识别、时间序列预…

线性代数的发展简史

线性代数的发展简史 线性代数作为数学的一个重要分支&#xff0c;其发展历史悠久而丰富。从古代文明中的基础计算到现代复杂的理论体系&#xff0c;线性代数经历了多个阶段的演变。 古代的起源 线性代数的雏形可以追溯到古埃及、古希腊、古印度和古代中国时期。这些早期文明…

网安瞭望台第4期:nuclei最新poc分享

国内外要闻 多款 D-Link 停产路由器漏洞&#xff1a;攻击者可远程执行代码 近日&#xff0c;知名网络硬件制造商 D-Link 发布重要安全公告。由于存在严重的远程代码执行&#xff08;RCE&#xff09;漏洞&#xff0c;其敦促用户淘汰并更换多款已停产的 VPN 路由器型号。 此次…

面试经典 150 题:205,55

205. 同构字符串 【解题思路】 来自大佬Krahets 【参考代码】 class Solution { public:bool isIsomorphic(string s, string t) {map<char, char> Smap, Tmap;for(int i0; i<s.size(); i){char a s[i], b t[i];//map容器存在该字符&#xff0c;且不等于之前映射…

IEC61850读服务器目录命令——GetServerDirectory介绍

IEC61850标准中的GetServerDirectory命令是变电站自动化系统中非常重要的一个功能&#xff0c;它主要用于读取服务器的目录信息&#xff0c;特别是服务器的逻辑设备节点&#xff08;LDevice&#xff09;信息。以下是对GetServerDirectory命令的详细介绍。 目录 一、命令功能 …