行业资讯 2025年08月6日
0 收藏 0 点赞 526 浏览 2579 个字
摘要 :

文章目录 1. 使用 Stream API 查找最大值/最小值 1.1. Stream.max()和Stream.min() 1.2. IntStream.summaryStatistics() 2. Collections.min()和Collections.max() 3.……




  • 1. 使用 Stream API 查找最大值/最小值
    • 1.1. Stream.max()和Stream.min()
    • 1.2. IntStream.summaryStatistics()
  • 2. Collections.min()和Collections.max()
  • 3. 对数组进行排序
  • 4. 迭代数组
  • 5. 递归
  • 六,结论

学习在 Java 中查找数组中的最大值和最小值我们将讨论从简单迭代到 Stream API 的不同方法。

在给定的示例中,我们采用 int 值数组。我们也可以将所有给定的解决方案应用于对象数组或自定义类。对于自定义对象,我们只需要重写equals()方法并提供正确的逻辑来比较两个实例。

int[] items = { 10, 0, 30, 2, 7, 5, 90, 76, 100, 45, 55 };   // Min = 0, Max = 100

1. 使用 Stream API 查找最大值/最小值

Java 流提供了许多有用的类和方法来执行聚合操作。让我们讨论其中的几个。

1.1. Stream.max()和Stream.min()

Stream接口提供了两种方法max()min()它们从底层流中返回最大和最小的项目。

如果我们想要项目之间的自定义Comparator比较逻辑,这两种方法都可以采用自定义实例。

对于基础数据类型,我们有IntStreamLongStreamDoubleStream来支持流项上的顺序和并行聚合操作。我们可以使用该java.util.Arrays.stream()方法将数组转换为 Stream,然后对其执行任何类型的操作。

int max = Arrays.stream(items).max().getAsInt(); // 100

int min = Arrays.stream(items).min().getAsInt(); // 0

1.2. IntStream.summaryStatistics()

在上面的示例中,我们通过两个单独的步骤找到数组的最大和最小项。我们创建流两次并对其进行两次操作。当我们只需要找到最大项或最小项时,这很有用。

如果我们必须找到最大和最小项,那么在一次迭代中从数组中获取最大和最小项是完全有意义的。我们可以使用IntSummaryStatistics实例来做到这一点。LongStream和DoubleStream也有类似的实例。

IntSummaryStatistics stats = Arrays.stream(items).summaryStatistics();

stats.getMax();        //100
stats.getMin();        //0

2. Collections.min()和Collections.max()

该类Collections提供集合中项目的聚合操作,例如List。我们可以将数组转换为列表,并使用这些 API 来查找最大和最小项目。

在给定的示例中,我们将 int[] 转换为 Integer[]。如果您已经有一个 Object[],那么您可以直接将数组传递给Arrays.asList()API。

Integer min = Collections.min(Arrays.asList(ArrayUtils.toObject(items)));
Integer max = Collections.max(Arrays.asList(ArrayUtils.toObject(items)));

3. 对数组进行排序

对于小型数组来说,对数组进行排序也是一个好方法。对于大型数组,排序可能会带来性能问题,因此请明智地选择。

在排序数组中,最小和最大项将位于数组的开头和结尾。

Arrays.sort(items);

max = items[items.length - 1];      //100
min = items[0];                        //0

4. 迭代数组

这是最基本的解决方案,伪代码是:

使用数组中的第一项初始化 max 和 min
从第二个位置(索引 1)迭代数组 将
    第 i 项与 max 和 min 进行比较
    如果当前项大于 max
        设置 max = 当前项
     否则如果当前项低于 min
         设置 min = 当前项目

循环结束后,maxmin变量将引用数组中最大和最小的项。

max = items[0];
min = items[0];
for (int i = 1; i < items.length; i++) {
  if (items[i] > max) {
    max = items[i];
  }
  else if (items[i] < min) {
    min = items[i];
  }
}
System.out.println(max);    //100
System.out.println(min);    //0

5. 递归

递归为大尺寸未排序数组提供了更好的性能。请注意,我们正在分别编写最大和最小项目的递归调用。如果我们需要在一次调用中找到这两个项目,我们将需要根据需求更改程序。

这个解决方案基本上是分治算法,我们只处理当前索引和其余结果(递归调用)并将它们合并在一起以获得最终输出。

为了获得最大项目,在每个项目中,我们返回比较中当前项目中较大的一个以及具有更大索引的所有项目。类似的方法是寻找最小项。

min = getMax(items, 0, items[0]);    //0
min = getMin(items, 0, items[0]);    //100
public static int getMax(final int[] numbers, final int a, final int n) {
return a >= numbers.length ? n
  : Math.max(n, getMax(numbers, a + 1, numbers[a] > n ? numbers[a] : n));
}
private static int getMin(final int[] numbers, final int a, final int n) {
return a == numbers.length ? n
  : Math.min(n, getMin(numbers, a + 1, numbers[a] < n ? numbers[a] : n));
}

六,结论

在这个简短的 Java 教程中,我们学习了在 Java 中从数组中查找最大和最小元素的不同方法。我们学习了如何使用 Stream API、Collections API、简单迭代以及递归等高级技术。

对于较小的数组,我们应该更注重代码的可读性并使用 Stream 或 Collection API。对于大型数组,我们可以考虑使用递归来获得显着的性能提升。

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9271.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号