Yanıtlar:
Artık Java 8 ile bunu üçüncü taraf çerçeveye ihtiyaç duymadan yapabilirsiniz:
Set<String> set = Stream.of("a","b","c").collect(Collectors.toSet());
Koleksiyonculara bakın .
Zevk almak!
Guava'yı kullanmak bu kadar basit:
Set<String> mySet = ImmutableSet.<String> of("a", "b");
Veya değiştirilebilir bir set için:
Set<String> mySet = Sets.newHashSet("a", "b")
Daha fazla veri türü için Guava kullanıcı kılavuzuna bakın
Sets.newHashSet("a", "b")veyaSets.newLinkedHashSet("a", "b")
Sets.newLinkedHashSet()bu imzayla mevcut değil, üzgünüm
Set<String> mySet = ImmutableSet.of("a", "b");
Kullanabilirsin
new HashSet<String>(Arrays.asList("a","b"));
Sıfır veya bir üyeli kümelerin özel durumları için şunları kullanabilirsiniz:
java.util.Collections.EMPTY_SET
ve:
java.util.Collections.singleton("A")
java.util.Collections.emptySet()bence, tür güvenliği nedeniyle EMPTY_SET yerine tercih edilir. Koleksiyonlar sınıfındaki yorumlardan:Unlike the like-named field, this method is parameterized.
Başkalarının dediği gibi, şunu kullanın:
new HashSet<String>(Arrays.asList("a","b"));
Bu vermez sebebi değil Java mevcut olmasıdır Arrays.asListyani döner sabit bir büyüklükte listesi:
public static void main(String a[])
{
List<String> myList = Arrays.asList("a", "b");
myList.add("c");
}
İadeler:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(Unknown Source)
at java.util.AbstractList.add(Unknown Source)
Sınıf Setiçinde "sabit boyutlu" JDK uygulaması yoktur Arrays. Neden bunu istiyorsun A Set, yineleme olmadığını garanti eder, ancak bunları elle yazıyorsanız, bu işlevselliğe ihtiyacınız olmamalı ... ve Listdaha fazla yönteme sahip olmalısınız . Her iki arayüz de genişler Collectionve Iterable.
Diğerlerinin söylediği gibi, bu işlevselliği gerçekten istiyorsanız guava kullanın - çünkü JDK'da bulunmuyor. Bununla ilgili bilgi için cevaplarına (özellikle Michael Schmeißer'in cevabına) bakın.
Java 9'da, fabrika yöntemleriyle benzer işlev eklenmiştir:
Set<String> oneLinerSet = Set.of("a", "b", ...);
(Eşdeğerler Listde vardır.)
Hayır ama bunu böyle yapabilirsin
new HashSet<String>(Arrays.asList("a", "b", ...));
İşte kullanabileceğiniz küçük bir yöntem
/**
* 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));
}
Java 8 ve numaralandırmaları kullanarak bunu yapmanın başka bir yolu şudur:
Set<String> set = EnumSet.of(StandardOpenOption.CREATE, StandardOpenOption.READ);
EnumSet konusuna bakın .
Bu yaklaşım arasında bir performans analizi öneririm ve
Set<String> set = Stream.of(StandardOpenOption.CREATE, StandardOpenOption.READ).collect(Collectors.toSet());
çünkü beşten fazla öğeniz varsa , yöntemin javadocu , Set.Of (E, E ...) javadoc'unda görebileceğiniz gibi performans sorunları olabileceğini belirtir .