1133 votes

La conversion de tableau liste en Java

Comment puis-je convertir un tableau à une liste en Java?

J'ai utilisé les Tableaux.asList() mais le comportement (et la signature) en quelque sorte changé de 1.4.2 pour 1.5.0 et la plupart des extraits que j'ai trouvé sur le web utilisation de l'1.4.2 comportement.

Par exemple:

int[] spam = new int[] { 1, 2, 3 };
Arrays.asList(spam)
  • sur 1.4.2 renvoie une liste contenant les éléments 1, 2, 3
  • sur 1.5.0 renvoie une liste contenant le tableau de spam

Dans de nombreux cas, il devrait être facile à détecter, mais parfois il peut se glisser inaperçu:

Assert.assertTrue(Arrays.asList(spam).indexOf(4) == -1);

1555voto

Joe Daley Points 9352

Dans votre exemple, c'est parce que vous ne pouvez pas avoir une Liste d'un type primitif. En d'autres termes, List<int> n'est pas possible. Vous pouvez, cependant, ont un List<Integer>.

Integer[] spam = new Integer[] { 1, 2, 3 };
Arrays.asList(spam);

Qui fonctionne comme prévu.

146voto

Roman Nikitchenko Points 3085

S'exprimant au sujet de la conversion façon, ça dépend de pourquoi vous avez besoin de votre List. Si vous en avez besoin juste de lire les données. OK, ici, vous allez:

Integer[] values = { 1, 3, 7 };
List<Integer> list = Arrays.asList(values);

Mais alors, si vous faites quelque chose comme cela:

list.add(1);

vous obtenez java.lang.UnsupportedOperationException. Donc, pour certains cas, vous avez encore besoin de ceci:

Integer[] values = { 1, 3, 7 };
List<Integer> list = new ArrayList<Integer>(Arrays.asList(values));

Première approche ne fait pas de convertir le tableau mais "représente" comme un List. Mais le tableau est sous le capot avec toutes ses propriétés, comme l'immuabilité. Veuillez noter que vous devez spécifier le type lors de la construction d' ArrayList.

127voto

Péter Török Points 72981

Le problème est que varargs était introduit dans Java5 et malheureusement, Arrays.asList() suis surchargé, avec une vararg version trop. Donc, Arrays.asList(spam) est comprise par le Java5 compilateur comme une vararg paramètre de type int tableaux :-(

Ce problème est expliqué plus en détails dans l'efficacité de la Java 2nd Ed., Le Chapitre 7, Article 42.

14voto

Stephen Gelman Points 123

J'ai récemment eu à convertir un tableau à une Liste. Plus tard, sur le programme filtré la liste de tenter de supprimer les données. Lorsque vous utilisez les Tableaux.asList(array) de la fonction, vous créer une collection de taille: vous ne pouvez ni ajouter, ni supprimer. Cette entrée décrit le problème mieux que moi: Pourquoi je reçois UnsupportedOperationException lorsque vous essayez de supprimer de la Liste?.

En fin de compte, j'ai dû faire un "manuel" de la conversion:

    List<ListItem> items = new ArrayList<ListItem>();
    for (ListItem item: itemsArray) {
        items.add(item);
    }

Je suppose que je pourrais avoir ajouté la conversion à partir d'un tableau pour une liste à l'aide d'une Liste.addAll(éléments) de l'opération.

6voto

gfrison Points 121

vous devez lancer dans la matrice de

Arrays.asList((Object[]) array)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X