Menú de navegaciónMenú
Categorías

La mejor forma de Aprender Programación online y en español www.campusmvp.es

?id=8fb85e14-8892-45fe-b8f1-ff24fd6a9366

3 formas de inicializar colecciones Java a la hora de declararlas


Foto por Aaron Burden en Unsplash

En muchos lenguajes, al definir una colección como un array o una lista podemos asignarle una sucesión de valores de forma que los contenga como elementos. En Java, podemos hacer esto con arrays básicos:

int[] miArray = new int[] {3, 1, 4};

Sin embargo, a la hora de inicializar una colección de objetos de una clase, la misma sintaxis no es aplicable. En su lugar, habitualmente debemos recurrir a los métodos que añaden elementos, como add en el caso de las clases con interfaz List:

List<Integer> miLista = new ArrayList<Integer>();
miLista.add(3);
miLista.add(1);
miLista.add(4);

En este post te enseño tres vías para conseguir introducir los elementos en la colección en menos código y con mayor legibilidad.

Métodos de utilidades

Una de las estrategias posibles para hacer más compacto este código es usar el método asList de la clase Arrays de herramientas para manipulación de vectores. Se trata de una solución muy simple que reduciría el código a la siguiente línea:

List<Integer> miLista = Arrays.asList(3, 1, 4);

Un detalle a tener en cuenta es que este método construye una lista de tamaño fijo, por lo que no se podrá ampliar. Para contar con esa posibilidad debemos realizar la conversión a una clase que implemente List:

List<Integer> miLista = new ArrayList<Integer>(Arrays.asList(3, 1, 4));

Inicialización de doble llave

Otra posibilidad es aprovechar un patrón de sintaxis conocida como la inicialización de doble llave. Esta consiste en abrir una llave que crea una subclase anónima, y una segunda llave que comienza un inicializador de instancia. Dentro de este inicializador podemos recurrir a los métodos del objeto que estamos definiendo de la siguiente forma:

List<Integer> miLista = new ArrayList<Integer>() {{ add(3); add(1); add(4); }};

Esta sintaxis es sorprendente y muy versátil, ya que no sólo se reduce a la funcionalidad de añadir elementos sino que se puede utilizar para realizar otras tareas de inicialización, como la definición de componentes de una interfaz de usuario. A pesar de esto, en muchos casos no es recomendada ya que la creación de una subclase anónima puede conllevar cierta sobrecarga.

Métodos factoría de Java 9

Una tercera opción que se ha introducido en Java 9 es el uso de métodos factoría ya incluidos en el lenguaje. Las interfaces List, Set y Map proporcionan un método of que nos permite hacer justo lo que necesitamos: especificar varios elementos a la hora de declarar una colección. El siguiente es un ejemplo de su uso:

List<Integer> miLista = List.of(3, 1, 4);

Esta opción no es totalmente equivalente a las anteriores ya que el método of construye colecciones inmutables. Para permitir modificar y añadir elementos, tendríamos que recurrir al constructor de la colección que deseemos:

List<Integer> miLista = new ArrayList<Integer>(List.of(3, 1, 4));

Espero que estos trucos te sean útiles para manejar pequeñas colecciones más fácilmente en Java.

Fuentes y más información:

Fecha de publicación:
David Charte David Charte es ingeniero informático y matemático, con un doctorado en Ciencia de Datos. Es un apasionado del conocimiento y la divulgación. Tiene amplia experiencia en el desarrollo de aplicaciones utilizando diversos lenguajes y plataformas. En la actualidad trabaja en Idoven, una empresa que usa Inteligencia Artificial para detectar enfermedades cardiovasculares. Ver todos los posts de David Charte
Archivado en: Lenguajes y plataformas

Boletín campusMVP.es

Solo cosas útiles. Una vez al mes.

🚀 Únete a miles de desarrolladores

DATE DE ALTA

x No me interesa | x Ya soy suscriptor

La mejor formación online para desarrolladores como tú

Agregar comentario

Los datos anteriores se utilizarán exclusivamente para permitirte hacer el comentario y, si lo seleccionas, notificarte de nuevos comentarios en este artículo, pero no se procesarán ni se utilizarán para ningún otro propósito. Lee nuestra política de privacidad.