Je cherche un moyen très simple de créer un ensemble.
Arrays.asList("a", "b" ...)
crée un List<String>
Existe-t-il quelque chose de similaire pour Set
?
Je cherche un moyen très simple de créer un ensemble.
Arrays.asList("a", "b" ...)
crée un List<String>
Existe-t-il quelque chose de similaire pour Set
?
Comme d'autres l'ont dit, utilisez :
new HashSet<String>(Arrays.asList("a","b"));
La raison pour laquelle cela no existent en Java est que Arrays.asList
renvoie une liste de taille fixe, en d'autres termes :
public static void main(String a[])
{
List<String> myList = Arrays.asList("a", "b");
myList.add("c");
}
Les retours :
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(Unknown Source)
at java.util.AbstractList.add(Unknown Source)
Il n'y a pas d'implémentation JDK d'une taille fixe. Set
à l'intérieur de la Arrays
classe. Pourquoi voulez-vous cela ? A Set
garantit qu'il n'y a pas de doublons, mais si vous les tapez à la main, vous ne devriez pas avoir besoin de cette fonctionnalité... et List
a plus de méthodes. Les deux interfaces étendent Collection
y Iterable
.
Comme d'autres l'ont dit, utilisez goyave Si vous voulez vraiment cette fonctionnalité - puisqu'elle n'est pas dans le JDK. Consultez leurs réponses (en particulier la réponse de Michael Schmeißer) pour obtenir des informations à ce sujet.
Voici une petite méthode que vous pouvez utiliser
/**
* Utility method analogous to {@link java.util.Arrays#asList(Object[])}
*
* @param ts
* @param <T>
* @return the set of all the parameters given.
*/
@SafeVarargs
@SuppressWarnings("varargs")
public static <T> Set<T> asSet(T... ts) {
return new HashSet<>(Arrays.asList(ts));
}
Une autre façon de le faire en utilisant Java 8 et les enums serait :
Set<String> set = EnumSet.of(StandardOpenOption.CREATE, StandardOpenOption.READ);
Ver EnumSet .
Je recommanderais une analyse de performance entre cette approche et
Set<String> set = Stream.of(StandardOpenOption.CREATE, StandardOpenOption.READ).collect(Collectors.toSet());
parce que si vous avez plus de cinq éléments, la javadoc de la méthode indique qu'il peut y avoir des problèmes de performance, comme vous pouvez le voir dans la javadoc de Set.Of(E, E...) .
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.