HOWTO · Java

Come restituire un ArrayList in Java

In questo tutorial, restituiremo un ArrayList da una funzione in Java.

In questa pagina

Un ArrayList è una raccolta ridimensionabile nel package java.util di Java. Per restituirne uno, dichiara un tipo di ritorno ArrayList, crea e popola la raccolta, quindi restituiscila con return. In Java, le funzioni dichiarate in una classe sono chiamate metodi. Scegli un metodo di istanza quando l’operazione utilizza lo stato di un oggetto, oppure un metodo statico quando il chiamante deve usare direttamente la classe. Se i chiamanti necesitano solo di operazioni di lista generali, un metodo può dichiarare l’interfaccia List<T> come tipo di ritorno restituendo al contempo un oggetto ArrayList<T>.

Restituire un ArrayList da una funzione non statica in Java

Un metodo non statico appartiene a un’istanza della sua classe. Il chiamante prima costruisce quella classe, poi invoca il metodo sull’oggetto risultante. In questo esempio, ClassB crea una lista di interi e Main riceve la raccolta restituita in una variabile dichiarata come List<Integer>. L’interfaccia List è un tipo di variabile utile quando il chiamante necesita solo di operazioni di lista, mentre il metodo può dichiarare il tipo concreto ArrayList<Integer>.

Il programma completo utilizza una classe pubblica, con ClassB annidata al suo interno, in modo che l’esempio possa essere salvato e compilato come un unico file sorgente Java. Il metodo main è il chiamante: crea ClassB, invoca myNumbers() tramite m1 e stampa i valori restituiti.

import java.util.ArrayList;
import java.util.List;

public class Main {
  static class ClassB {
    public ArrayList<Integer> myNumbers() {
      ArrayList<Integer> numbers = new ArrayList<>();
      numbers.add(10);
      numbers.add(15);
      numbers.add(30);
      return numbers;
    }
  }

  public static void main(String[] args) {
    ClassB m1 = new ClassB();
    List<Integer> listInMain = m1.myNumbers();
    System.out.println("The List is " + listInMain);
  }
}
The List is [10, 15, 30]

Il tipo generico Integer descrive gli elementi contenuti nella raccolta. Il metodo crea una nuova lista a ogni chiamata, aggiunge tre numeri e restituisce quella lista. Il chiamante può leggere la raccolta restituita, iterarla o aggiungervi valori. Il metodo restituisce un riferimento alla lista; non converte la raccolta in un array. Poiché il chiamante riceve quello stesso oggetto, le modifiche apportate tramite il riferimento restituito influiscono sulla lista creata dal metodo.

Restituire un ArrayList da una funzione statica in Java

Un metodo statico appartiene alla classe piuttosto che a un oggetto particolare. Chiamalo con il nome della classe e il nome del metodo, in modo che questa versione non costruisca ClassB. Ciò è utile quando il lavoro del metodo non dipende da campi memorizzati su un’istanza specifica. Il suo corpo crea e restituisce comunque un ArrayList nello stesso modo del metodo di istanza.

Questo programma autonomo utilizza gli stessi dati in modo che tu possa concentrarti sulla forma della chiamata. Poiché il metodo è dichiarato static, Main lo invoca come ClassB.myNumbers(). Il valore restituito viene assegnato a una variabile List<Integer> e stampato dal chiamante.

import java.util.ArrayList;
import java.util.List;

public class Main {
  static class ClassB {
    public static ArrayList<Integer> myNumbers() {
      ArrayList<Integer> numbers = new ArrayList<>();
      numbers.add(10);
      numbers.add(15);
      numbers.add(30);
      return numbers;
    }
  }

  public static void main(String[] args) {
    List<Integer> listInMain = ClassB.myNumbers();
    System.out.println("The List is " + listInMain);
  }
}
The List is [10, 15, 30]

Usa un metodo di istanza quando l’operazione necesita dello stato di un oggetto, e un metodo statico quando è a livello di classe e non necesita di un’istanza. In entrambi i casi, rendi il tipo di ritorno dichiarato compatibile con il valore e assegna il risultato a un tipo compatibile nel punto di chiamata. L’istruzione return termina il metodo e consegna la lista popolata al chiamante, che può usare le normali operazioni di List.