3201 votes

L'initialisation d'une liste de tableaux sur une seule ligne

Je veux créer une liste d'options à des fins de test. Au premier abord, j'ai fait ça:

ArrayList<String> places = new ArrayList<String>();
places.add("Buenos Aires");
places.add("Córdoba");
places.add("La Plata");

Ensuite, j'ai refait le code comme suit:

ArrayList<String> places = new ArrayList<String>(
    Arrays.asList("Buenos Aires", "Córdoba", "La Plata"));

Est-il une meilleure façon de le faire?

2557voto

Tom Points 13036

Ce serait plus simple si vous ne déclarez qu'une Liste - t-il une liste de tableaux?

List<String> places = Arrays.asList("Buenos Aires", "Córdoba", "La Plata");

Cela signifierait que des lieux est immuable (en essayant de changer, il sera la cause d'une exception).

Pour faire une mutable liste qui est un béton ArrayList vous pouvez créer une liste de tableaux à partir de la liste immuable:

ArrayList<String> places = new ArrayList(Arrays.asList("Buenos Aires", "Córdoba", "La Plata"));

2207voto

coobird Points 70356

En fait, probablement la "meilleure" façon d'initialiser l' ArrayList est la méthode que vous avez écrit, comme il n'a pas besoin de créer un nouveau List :

ArrayList<String> list = new ArrayList<String>();
list.add("A");
list.add("B");
list.add("C");

Le hic, c'est qu'il y a un peu de dactylographie requise pour la désigner list de l'instance.

Il existe d'autres solutions, comme faire un anonyme intérieur de la classe avec une instance de l'initialiseur (également connu comme un "double croisillon d'initialisation"):

ArrayList<String> list = new ArrayList<String>() {{
    add("A");
    add("B");
    add("C");
}}

Cependant, je ne suis pas trop friands de cette méthode, car ce que vous finissez avec est une sous-classe de ArrayList qui a une instance d'initialiseur, et que la classe est créée juste pour créer un objet, qui semble juste comme un petit peu exagéré pour moi.

Ce qui aurait été agréable était de savoir si la Collecte des Littéraux de proposition pour le Projet de Pièce de monnaie a été accepté (il était prévu pour être introduit dans Java 7, mais il n'est pas susceptible d'être une partie de Java 8 ni.):

List<String> list = ["A", "B", "C"];

Malheureusement, il ne vous aidera pas ici, car il va initialiser immuable List plutôt qu'un ArrayList, et en outre, il n'est pas encore disponible, si jamais il le sera.

1091voto

Dans la plupart des cas, utilisez simplement

List<String> strings = asList("foo", "bar", "baz");

avec un

import static java.util.Arrays.asList;

Si vous devez pour une raison quelconque, ont un ArrayList, l'utilisation

List<String> strings = new ArrayList<>(asList("foo", "bar", "baz"));

Vous avez dit que vous avez déclaré à la liste en tant que ArrayList dans votre code, mais vous ne devriez pas le faire sauf si vous êtes à l'aide de certains membres de l' ArrayList ce n'est pas en List, par exemple ArrayList.ensureCapacity().

Habituellement, vous avez juste à déclarer les variables les plus générales de l'interface que vous allez utiliser (pour des listes est habituellement List si vous avez besoin d'un accès aléatoire, Collection si vous avez besoin de sa taille, ou Iterable si vous avez juste besoin d'itérer sur elle), et de les initialiser avec la mise en œuvre spécifique, par exemple ArrayList ou LinkedList.

Travailler avec les interfaces, pas implémentations, sinon, vous trouverez que vous avez à modifier dans plus d'un endroit lorsque vous souhaitez utiliser une autre application.

Un autre exemple serait toujours déclarer une variable InputStream même si il est habituellement un FileInputStream, parce qu'un jour, bientôt, vous ou quelqu'un d'autre ne souhaitez utiliser un autre type d' InputStream.

120voto

Randyaa Points 904

si vous avez besoin d'une simple liste de taille 1:

List<String> strings = new ArrayList<String>(Collections.singletonList("A"));

si vous avez besoin d'une liste de plusieurs objets:

List<String> strings = new ArrayList<String>();
Collections.addAll(strings,"A","B","C","D");

63voto

Paweł Adamski Points 369

Avec la GOYAVE, vous pouvez écrire:

ArrayList<String> places = Lists.newArrayList("Buenos Aires", "Córdoba", "La Plata"));

Dans la Goyave il y a aussi d'autres constructeurs statiques, vous pouvez lire à leur sujet ici

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