AOWS

Just another adrian’s weblog

Cuestiones convirtiendo un array a una lista con Arrays.asList()

with 2 comments

Hace unos días comentaba uno de los muchos usos que tiene la clase Arrays de Java. Esta clase intenta solventar alguno de los problemas que pueden surgir al trabajar con arrays, como la ordenación o la búsqueda.

Pero si por cualquier motivo necesitamos convertir un array a una lista, podemos usar el método

public static <T> List<T> asList(T... a)

Pero mucho cuidado, este método nos crea una lista de tamaño fijo, y por detrás sigue funcionando sobre nuestro array (en realidad es una implementación especial de AbstractList). Veámoslo con dos ejemplos.

String[] aS = { "a", "b", "c" };
List<String> lS = Arrays.asList(aS);
lS.add("d");

Este trozo de código no va a funcionar, la lista es de tamaño fijo y se lanza una excepción.

String[] aS = { "a", "b", "c" };
List<String> lS = Arrays.asList(aS);
System.out.println(lS);

aS[1] = "d";
System.out.println(lS);

En este caso la salida producida será:

[a, b, c]
[a, d, c]

Como vemos, las modificaciones que hagamos en el array original se reflejarán en la lista (y viceversa).

Si sólo vamos a utilizar la lista como consulta no debería haber ningún problema, pero hay que tener mucho cuidado con utilizar este método para convertir un array a una lista para, por ejemplo, cumplir con la firma de métodos de terceros que puedan intentar modificarla.

Para obtener una lista “real”, una implementación de java.util.ArrayList, por ejemplo, podemos hacer algo así:

List<String> lS1 = new ArrayList<String>(Arrays.asList(aS));

Written by adrian

27 abril, 2009 a 06:48

Publicado en Uncategorized

Tagged with

2 comentarios

Subscribe to comments with RSS.

  1. Gracias compañero, muy útil.

    anónimo

    27 mayo, 2012 at 15:53

  2. Es un buen artículo, práctico, pero me hubiera gustado poder compartirlo en twitter o facebook…

    David Moñino

    18 abril, 2013 at 09:24


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: