回答:
Java 8では、サードパーティのフレームワークを必要とせずにこれを行うことができます。
Set<String> set = Stream.of("a","b","c").collect(Collectors.toSet());
コレクターを参照してください。
楽しい!
Guavaを使用すると、それはそれと同じくらい簡単です:
Set<String> mySet = ImmutableSet.<String> of("a", "b");
または、可変セットの場合:
Set<String> mySet = Sets.newHashSet("a", "b")
その他のデータタイプについては、Guavaユーザーガイドを参照してください
Sets.newHashSet("a", "b")
またはSets.newLinkedHashSet("a", "b")
Sets.newLinkedHashSet()
は、その署名では存在しません。申し訳ありません
Set<String> mySet = ImmutableSet.of("a", "b");
あなたは使うことができます
new HashSet<String>(Arrays.asList("a","b"));
メンバーが0個または1個のセットの特殊なケースでは、以下を使用できます。
java.util.Collections.EMPTY_SET
そして:
java.util.Collections.singleton("A")
java.util.Collections.emptySet()
タイプセーフのため、私の考えでは、EMPTY_SETよりも優先されます。コレクションクラスのコメント:Unlike the like-named field, this method is parameterized.
他の人が言ったように、使用します:
new HashSet<String>(Arrays.asList("a","b"));
これがJavaに存在しない理由Arrays.asList
は、固定サイズのリストを返すためです。つまり、
public static void main(String a[])
{
List<String> myList = Arrays.asList("a", "b");
myList.add("c");
}
戻り値:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(Unknown Source)
at java.util.AbstractList.add(Unknown Source)
クラスSet
内に「固定サイズ」のJDK実装はありませんArrays
。なぜこれが欲しいのですか?Set
保証はまったく重複がないことが、あなたは手でそれらを入力している場合は、その機能を必要とする...とはならないList
多くの方法があります。両方のインターフェイスが拡張さCollection
れIterable
ます。
他の人が言ったように、本当にこの機能が必要な場合はguavaを使用してください-JDKにはないので。詳細については、回答(特にMichaelSchmeißerの回答)を参照してください。
Java 9では、同様の機能がファクトリメソッドを介して追加されています。
Set<String> oneLinerSet = Set.of("a", "b", ...);
(同等のList
ものもあります。)
いいえ、でもこのようにできます
new HashSet<String>(Arrays.asList("a", "b", ...));
ここにあなたが使用できる小さな方法があります
/**
* 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と列挙型を使用してそれを行う別の方法は次のとおりです。
Set<String> set = EnumSet.of(StandardOpenOption.CREATE, StandardOpenOption.READ);
EnumSetを参照してください。
このアプローチと
Set<String> set = Stream.of(StandardOpenOption.CREATE, StandardOpenOption.READ).collect(Collectors.toSet());
5つを超える要素がある場合、メソッドのjavadocは、Set.Of(E、E ...)の javadocで確認できるように、パフォーマンスの問題である可能性があると述べています。