HOWTO · Java

Cómo devolver un ArrayList en Java

En este tutorial, devolveremos un ArrayList desde una función en Java.

En esta página

Un ArrayList es una colección redimensionable del paquete java.util de Java. Para devolver uno, declare un tipo de retorno ArrayList, cree y rellene la colección, y luego devuélvala con return. En Java, las funciones declaradas en una clase se llaman métodos. Elija un método de instancia cuando la operación utilice el estado de un objeto, o un método estático cuando el llamador deba usar la clase directamente. Si los llamadores solo necesitan operaciones generales de lista, un método puede declarar la interfaz List<T> como su tipo de retorno y devolver un objeto ArrayList<T>.

Devolver un ArrayList desde una función no estática en Java

Un método no estático pertenece a una instancia de su clase. El llamador primero construye esa clase y luego invoca el método sobre el objeto resultante. En este ejemplo, ClassB crea una lista de enteros y Main recibe la colección devuelta en una variable declarada como List<Integer>. La interfaz List es un tipo de variable útil cuando el llamador solo necesita operaciones de lista, mientras que el método puede declarar el tipo concreto ArrayList<Integer>.

El programa completo utiliza una clase pública, con ClassB anidada dentro de ella, para que el ejemplo pueda guardarse y compilarse como un único archivo fuente de Java. El método main es el llamador: crea ClassB, invoca myNumbers() a través de m1 e imprime los valores devueltos.

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]

El tipo genérico Integer describe los elementos que contiene la colección. El método crea una lista nueva en cada llamada, añade tres números y devuelve esa lista. El llamador puede leer la colección devuelta, iterar sobre ella o añadirle valores. El método devuelve una referencia a la lista; no convierte la colección en un array. Como el llamador recibe ese mismo objeto, los cambios realizados a través de la referencia devuelta afectan a la lista creada por el método.

Devolver un ArrayList desde una función estática en Java

Un método estático pertenece a la clase y no a un objeto concreto. Llámelo con el nombre de la clase y el nombre del método, de modo que esta versión no construye ClassB. Esto es útil cuando el trabajo del método no depende de campos almacenados en una instancia específica. Su cuerpo sigue creando y devolviendo un ArrayList de la misma manera que el método de instancia.

Este programa independiente utiliza los mismos datos para que pueda centrarse en la forma de la llamada. Como el método está declarado como static, Main lo invoca como ClassB.myNumbers(). El valor devuelto se asigna a una variable List<Integer> y el llamador lo imprime.

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]

Use un método de instancia cuando la operación necesite el estado de un objeto, y un método estático cuando sea de nivel de clase y no necesite una instancia. En ambos casos, haga que el tipo de retorno declarado sea compatible con el valor y asigne el resultado a un tipo compatible en el punto de llamada. La instrucción return termina el método y entrega la lista rellena al llamador, que puede usar operaciones normales de List.