Quel est le chemin le plus court pour initialiser la Liste de chaînes de caractères en java?
Je suis à la recherche pour le chemin le plus court (en code) pour initialiser la liste de chaînes et de tableau de chaînes de caractères, c'est à dire la liste/tableau contenant
"s1", "s2", "s3" éléments de chaîne.
Notez qu'il sera de retour une ArrayList, mais c'est pas la normale java.util.ArrayList - c'est une interne qui est mutable, mais de taille fixe.
Personnellement, je préfère la Goyave version qu'il montre clairement ce qui se passe (la liste de mise en œuvre qui sera retourné). Il est également encore clair ce qui se passe si vous statiquement à l'importation de la méthode:
En général, je veux soit ont complètement mutable liste (dans ce cas, Lists.newArrayList est le meilleur) ou un tout immuable de la liste (dans ce cas, ImmutableList.of est le meilleur). C'est rare que j'ai vraiment voulez une mutable mais de taille fixe la liste.
pourquoi ne pas simplement des Tableaux.asList("s1", "s2", "s3")?
J'étais en ajoutant que - personnellement, je préfère la nature explicite de la Goyave version.
qui est inmodifiable - Il est en fait modifiables (mais de taille fixe).
Pas de problème. Je vais supprimer celui de la réponse pour vous, et puis supprimer ce un peu, si vous souhaitez supprimer votre deuxième aussi 🙂
Avec tout le respect pour Jon Skeet. N'est-il pas préférable d'utiliser des Tableaux.asList() au lieu de ImmutableList.de(), comme plus tard, permettra de maintenir la copie d'un tableau. Pouvez-vous s'il vous plaît partager un peu de lumière sur ce point?
Pas si vous voulez la liste pour être immuable. C'est pourquoi je donne des options multiples - la meilleure approche dépend de ce que vous voulez.
Je suis entièrement d'accord avec vous @JonSkeet . Merci pour la clarification.
Java 9 introduit une méthode de convenance Liste.de utilisés comme suit:
List<String> l =List.of("s1","s2","s3");
Java 8 et plus
Voici quelques alternatives:
//Short, but the resulting list is fixed size.List<String> list1 =Arrays.asList("s1","s2","s3");//Similar to above, but the resulting list can grow.List<String> list2 =newArrayList<>(Arrays.asList("s1","s2","s3"));//Using initialization block. Useful if you need to "compute" the strings.List<String> list3 =newArrayList<String>(){{
add("s1");
add("s2");
add("s3");}};
Quand il s'agit de tableaux, vous pouvez initialiser le point de la déclaration comme ceci:
String[] arr ={"s1","s2","s3"};
Si vous avez besoin de réinitialiser ou de créer sans le stocker dans une variable, vous ne
newString[]{"s1","s2","s3"}
Si les constantes de chaîne sont peut cependant, il ressemblerait à
Elite Gentleman: Le résultat de Tableaux.asList est immuable. Si une nouvelle liste de tableaux est construit comme dans str2 ensuite, il est possible d'ajouter à la liste par la suite.
Schwarz, pas immuable, fixe de taille moyenne.
Vous avez raison! Il est possible d'écraser les données existantes.
Vous devriez noter que les l'initialisation du bloc variante crée un anonyme sous-classe de la classe ArrayList.
Je ne suis pas familier avec la Goyave, mais presque toutes les solutions mentionnées dans d'autres réponses et de l'aide du JDK souffrent ont des défauts:
La Arrays.asList méthode renvoie une taille fixe de liste.
{{Double accolade de l'initialisation}} est connu pour créer le classpath de l'encombrement et ralentir l'exécution de. Il a aussi besoin d'une ligne de code par élément.
Java 9: la statique de la méthode de fabrique Liste.derenvoie une structure immuable de la liste. En outre, List.of est basée sur la valeur, et, par conséquent, son contrat ne garantit pas qu'il sera de retour un nouvel objet à chaque fois.
Ici est un Java 8 one-liner pour la collecte de chacun des multiples objets dans un ArrayList, ou des éventuelles collectes pour cette question.
List<String> list =Stream.of("s1","s2","s3").collect(Collectors.toCollection(ArrayList::new));
Note: aioobe la solution de la copie d'un transitoire de la collection (new ArrayList<>(Arrays.asList("s1", "s2", "s3"))) est également excellent.
Il y a plusieurs options. Personnellement, j'aime utiliser des Goyave:
(Goyave est une bibliothèque peine d'avoir de toute façon, bien sûr 🙂
En utilisant simplement le JDK, vous pouvez utiliser:
Notez qu'il sera de retour une
ArrayList
, mais c'est pas la normalejava.util.ArrayList
- c'est une interne qui est mutable, mais de taille fixe.Personnellement, je préfère la Goyave version qu'il montre clairement ce qui se passe (la liste de mise en œuvre qui sera retourné). Il est également encore clair ce qui se passe si vous statiquement à l'importation de la méthode:
... alors que si vous statiquement à l'importation
asList
il ressemble un peu étrangeté.Un autre Goyave option, si vous ne voulez pas modifiable-en-toute-façon de la liste:
En général, je veux soit ont complètement mutable liste (dans ce cas,
Lists.newArrayList
est le meilleur) ou un tout immuable de la liste (dans ce cas,ImmutableList.of
est le meilleur). C'est rare que j'ai vraiment voulez une mutable mais de taille fixe la liste.Java 9+
Java 9 introduit une méthode de convenance
Liste.de
utilisés comme suit:Java 8 et plus
Voici quelques alternatives:
Quand il s'agit de tableaux, vous pouvez initialiser le point de la déclaration comme ceci:
Si vous avez besoin de réinitialiser ou de créer sans le stocker dans une variable, vous ne
Si les constantes de chaîne sont peut cependant, il ressemblerait à
Dans ces habitude, je préfère l'écriture
str2
ensuite, il est possible d'ajouter à la liste par la suite.Tous ces objets existent dans le JDK.
PS: Comme aioobe a déclaré, ce qui rend la liste de taille fixe.
Vous pouvez utiliser le
Arrays
classe dans la norme API Java: http://download.oracle.com/javase/6/docs/api/java/util/Arrays.html#asList(T...)Être conscient que la resultning liste est de taille fixe (vous ne pouvez pas ajouter).
Avec Eclipse Collections, vous pouvez écrire le code suivant:
Vous pouvez également être plus précis sur les types et qu'ils sont Mutables ou Immuable.
Vous pouvez également faire la même chose avec des Jeux, des Sacs et des Cartes:
Il y a des usines pour SortedSets, SortedBags et SortedMaps ainsi.
Remarque: je suis un committer pour Eclipse Collections.
JDK2
JDK7
JDK8
JDK9
Plus il y a beaucoup d'autres moyens fournis par d'autres bibliothèques comme la Goyave.
Je ne suis pas familier avec la Goyave, mais presque toutes les solutions mentionnées dans d'autres réponses et de l'aide du JDK souffrent ont des défauts:
La
Arrays.asList
méthode renvoie une taille fixe de liste.{{Double accolade de l'initialisation}} est connu pour créer le classpath de l'encombrement et ralentir l'exécution de. Il a aussi besoin d'une ligne de code par élément.
Java 9: la statique de la méthode de fabrique
Liste.de
renvoie une structure immuable de la liste. En outre,List.of
est basée sur la valeur, et, par conséquent, son contrat ne garantit pas qu'il sera de retour un nouvel objet à chaque fois.Ici est un Java 8 one-liner pour la collecte de chacun des multiples objets dans un
ArrayList
, ou des éventuelles collectes pour cette question.Note: aioobe la solution de la copie d'un transitoire de la collection (
new ArrayList<>(Arrays.asList("s1", "s2", "s3"))
) est également excellent.