HOWTO · Java

Holen Sie sich die Summe eines Arrays in Java

Erfahren Sie, wie Sie die Summe eines Arrays in Java mithilfe von Schleifen und Streams ermitteln.

Auf dieser Seite

Um ein int[] in Java zu summieren, können Sie Arrays.stream(numbers).sum() als knappe integrierte Lösung verwenden oder die Werte mit einer for-Schleife addieren, wenn Sie jeden Schritt explizit steuern möchten. Java-Arrays besitzen keine eigene sum()-Instanzmethode. Arrays.stream(int[]) wandelt die Werte in einen IntStream um, der sum() und reduce() bereitstellt.
Das Summieren eines Arrays ist eine der Kerndatenoperationen im Java-Tutorial, das die Anleitungen zu Arrays und Collections von den Grundlagen bis zu Streams ordnet.

Die folgenden Beispiele verwenden dieselben sechs Werte, deren Summe 149 beträgt. Jedes Programm ist eigenständig und kann als SimpleTesting.java gespeichert werden.

Ein int-Array mit einer for-Schleife summieren

Bei einer gewöhnlichen Schleife ist jeder Schritt gut nachvollziehbar: Zuerst wird der Akkumulator initialisiert, dann wird jeder Index durchlaufen und das jeweilige Element addiert. Diese Variante ist besonders geeignet, wenn Sie die Berechnung Schritt für Schritt nachvollziehen oder während des Durchlaufs weitere Logik ergänzen möchten.

Dieses Programm addiert die sechs Werte in numbers und gibt ihre Summe aus. Die Schleifenbedingung verwendet numbers.length; auch für die Länge und den Zugriff auf die Elemente wird durchgehend derselbe Arrayname verwendet.

public class SimpleTesting {
  public static void main(String[] args) {
    int[] numbers = {12, 34, 45, 21, 33, 4};
    int total = 0;

    for (int i = 0; i < numbers.length; i++) {
      total += numbers[i];
    }

    System.out.println("Array Sum = " + total);
  }
}
Array Sum = 149

Ein int-Array mit einem parallelen Stream und reduce summieren

Rufen Sie parallel() für den von Arrays.stream(numbers) zurückgegebenen IntStream auf, um einen parallelen Stream zu verwenden. Die zweistellige Variante von reduce erhält einen Identitätswert (0) und eine Additionsoperation. Da die Addition assoziativ ist, lassen sich Teilsummen zum selben Ergebnis zusammenführen. Bei einem kurzen Array ist die sequenzielle Variante vorzuziehen, sofern parallele Verarbeitung nicht zum übrigen Arbeitsaufkommen passt: Eine parallele Ausführung macht eine kleine Berechnung nicht automatisch schneller.

import java.util.Arrays;

public class SimpleTesting {
  public static void main(String[] args) {
    int[] numbers = {12, 34, 45, 21, 33, 4};
    int total = Arrays.stream(numbers)
        .parallel()
        .reduce(0, (left, right) -> left + right);

    System.out.println("Array Sum = " + total);
  }
}
Array Sum = 149

Ein int-Array mit Arrays.stream(...).reduce(...) summieren

Lassen Sie bei einem sequenziellen Stream parallel() weg. Arrays.stream(int[]) gibt weiterhin einen IntStream zurück. reduce(0, Integer::sum) beginnt mit dem Identitätswert und addiert damit jeden primitiven Wert. Der Identitätswert stellt sicher, dass die Operation auch dann wohldefiniert ist, wenn keine Werte zusammengeführt werden müssen.

import java.util.Arrays;

public class SimpleTesting {
  public static void main(String[] args) {
    int[] numbers = {12, 34, 45, 21, 33, 4};
    int total = Arrays.stream(numbers).reduce(0, Integer::sum);

    System.out.println("Array Sum = " + total);
  }
}
Array Sum = 149

Ein int-Array mit Arrays.stream(...).sum() summieren

Wenn die Werte addiert werden sollen, drückt sum() die Absicht direkter aus als eine Reduktion. Die Methode ist eine abschließende Operation auf dem aus dem Array erzeugten IntStream und gibt die Summe als int zurück.

Da diese Methode int zurückgibt, wird die Summe mit der 32-Bit-Integer-Arithmetik von Java berechnet. Kann das mathematische Ergebnis den Wertebereich von int überschreiten, erweitern Sie den Stream vor der Addition, zum Beispiel mit Arrays.stream(numbers).asLongStream().sum(). Auch bei einer gewöhnlichen Schleife benötigen Sie für diesen Wertebereich einen long-Akkumulator und müssen die Werte vor der Addition erweitern.

import java.util.Arrays;

public class SimpleTesting {
  public static void main(String[] args) {
    int[] numbers = {12, 34, 45, 21, 33, 4};
    int total = Arrays.stream(numbers).sum();

    System.out.println("Array Sum = " + total);
  }
}
Array Sum = 149

Ein int-Array mit IntStream.of(...).sum() summieren

IntStream.of(numbers) ist eine weitere direkte Möglichkeit, aus einem int[] einen IntStream zu erzeugen. Die Operation sum() liefert dieselbe Summe wie Arrays.stream(numbers).sum(). Verwenden Sie die Variante, die sich in Ihrem Code natürlicher liest.

import java.util.stream.IntStream;

public class SimpleTesting {
  public static void main(String[] args) {
    int[] numbers = {12, 34, 45, 21, 33, 4};
    int total = IntStream.of(numbers).sum();

    System.out.println("Array Sum = " + total);
  }
}
Array Sum = 149

Ein int-Array mit einer kompakten for-Schleife summieren

Die folgende Schleife fasst Initialisierung, Fortsetzungsbedingung und Addition im for-Kopf zusammen und durchläuft das Array anschließend vom letzten bis zum ersten Index. Das ist gültiges Java, doch der leere Schleifenkörper und das Dekrement im Aktualisierungsausdruck machen den Code schwerer zu überblicken als die gewöhnliche Schleife. Verwenden Sie die klarere Form, sofern die kompakte Schreibweise nicht ausdrücklich hilfreich ist.

public class SimpleTesting {
  public static void main(String[] args) {
    int[] numbers = {12, 34, 45, 21, 33, 4};
    int total;
    int i;

    for (total = 0, i = numbers.length - 1;
         i >= 0;
         total += numbers[i--]) {
      // Accumulation happens in the loop update expression.
    }

    System.out.println("Array Sum = " + total);
  }
}
Array Sum = 149