java 数组求和 详解 java 数组求和 详解

在 Java 中,数组求和是一个常见的操作,可以通过多种方法实现,包括手动遍历、使用流(Stream API)或调用现成的库方法。以下是详细的介绍与代码实现。


1. 使用循环求和

1.1 for 循环

通过常规的 for 循环逐个遍历数组中的元素并累加求和:

代码实现
public class ArraySumExample {
 public static void main(String[] args) {
 int[] arr = {1, 2, 3, 4, 5};
 int sum = 0;
 // 使用 for 循环
 for (int i = 0; i < arr.length; i++) {
 sum += arr[i];
 }
 System.out.println("数组求和结果为: " + sum);
 }
}
运行结果
数组求和结果为: 15

1.2 for-each 循环

使用增强的 for-each 循环来遍历数组并求和,代码更简洁。

代码实现
public class ArraySumExample {
 public static void main(String[] args) {
 int[] arr = {1, 2, 3, 4, 5};
 int sum = 0;
 // 使用 for-each 循环
 for (int num : arr) {
 sum += num;
 }
 System.out.println("数组求和结果为: " + sum);
 }
}
运行结果
数组求和结果为: 15

2. 使用 Stream API

Java 8 引入了流式编程,可以通过 Stream 的方法更高效地操作数组并求和。

2.1 使用 Arrays.stream()

通过 Arrays.stream() 创建一个流,并使用 sum() 方法直接求和。

代码实现
import java.util.Arrays;
public class ArraySumExample {
 public static void main(String[] args) {
 int[] arr = {1, 2, 3, 4, 5};
 // 使用 Stream API
 int sum = Arrays.stream(arr).sum();
 System.out.println("数组求和结果为: " + sum);
 }
}
运行结果
数组求和结果为: 15

2.2 使用 IntStream.of()

除了 Arrays.stream(),也可以使用 IntStream.of() 来生成流并求和。

代码实现
import java.util.stream.IntStream;
public class ArraySumExample {
 public static void main(String[] args) {
 int[] arr = {1, 2, 3, 4, 5};
 // 使用 IntStream.of()
 int sum = IntStream.of(arr).sum();
 System.out.println("数组求和结果为: " + sum);
 }
}
运行结果
数组求和结果为: 15

3. 使用递归

递归是一种通过函数调用自身来解决问题的方法。可以用递归计算数组的和。

代码实现

public class ArraySumExample {
 public static void main(String[] args) {
 int[] arr = {1, 2, 3, 4, 5};
 // 调用递归方法
 int sum = sumArray(arr, arr.length - 1);
 System.out.println("数组求和结果为: " + sum);
 }
 // 递归方法
 public static int sumArray(int[] arr, int index) {
 if (index < 0) { // 递归结束条件
 return 0;
 }
 return arr[index] + sumArray(arr, index - 1);
 }
}
运行结果
数组求和结果为: 15

4. 使用第三方库

4.1 Apache Commons Lang 的 ArrayUtils

Apache Commons Lang 提供了数组操作工具类 ArrayUtils,可以方便地对数组进行操作。

代码实现
import org.apache.commons.lang3.ArrayUtils;
public class ArraySumExample {
 public static void main(String[] args) {
 int[] arr = {1, 2, 3, 4, 5};
 // 使用 ArrayUtils.sum()(假设自定义实现)
 int sum = ArrayUtils.sum(arr);
 System.out.println("数组求和结果为: " + sum);
 }
}

注意ArrayUtils 并未直接提供 sum() 方法,但可以通过组合实现类似功能。通常需要引入外部依赖。


5. 多维数组求和

对于多维数组,可以通过嵌套循环实现求和。

代码实现

public class ArraySumExample {
 public static void main(String[] args) {
 int[][] arr = {
 {1, 2, 3},
 {4, 5, 6},
 {7, 8, 9}
 };
 int sum = 0;
 // 使用嵌套循环求和
 for (int[] row : arr) {
 for (int num : row) {
 sum += num;
 }
 }
 System.out.println("多维数组求和结果为: " + sum);
 }
}
运行结果
多维数组求和结果为: 45

6. 时间复杂度分析

单维数组

  1. 循环求和

    • 时间复杂度: O ( n ) O(n) O(n),需要遍历数组中的每个元素一次。
    • 空间复杂度: O ( 1 ) O(1) O(1),只使用了常量级额外空间。
  2. Stream API

    • 时间复杂度: O ( n ) O(n) O(n),同样需要遍历数组。
    • 空间复杂度: O ( 1 ) O(1) O(1),流的求和方法不会额外开辟内存。
  3. 递归求和

    • 时间复杂度: O ( n ) O(n) O(n),每个递归调用处理一个数组元素。
    • 空间复杂度: O ( n ) O(n) O(n),递归调用需要使用栈存储每次调用的状态。

多维数组

  • 如果数组是 m × n m \times n m×n 的二维数组:
    • 时间复杂度: O ( m × n ) O(m \times n) O(m×n),需要遍历所有元素。
    • 空间复杂度: O ( 1 ) O(1) O(1)

7. 总结

方法简单性性能空间复杂度使用场景
循环简单高效 O ( 1 ) O(1) O(1)常见需求,适用于所有数组
Stream API简洁高效 O ( 1 ) O(1) O(1)Java 8+,偏向函数式风格
递归较复杂一般 O ( n ) O(n) O(n)小规模数组,教学用途
库方法简洁高效 O ( 1 ) O(1) O(1)外部依赖项目

选择适合的实现方法取决于具体需求、项目风格和数据规模。对于大部分场景,for 循环和 Stream 是首选。

作者:飞滕人生TYF原文地址:https://blog.csdn.net/T_Y_F_/article/details/143958096

%s 个评论

要回复文章请先登录注册