- Q1
Javaで継承を示すキーワードはどれですか?
ANSWERextendsクリックして解説を表示EXPLANATIONextendsキーワードを使用してクラスを継承します。サブクラスはスーパークラスのメンバーを継承します。 - Q2
次のコードで、DogクラスはAnimalクラスを継承しています。正しい宣言はどれですか?
ANSWERclass Dog extends Animalクリックして解説を表示EXPLANATIONclass Dog extends Animalの形式でDogクラスがAnimalクラスを継承することを宣言します。 - Q3
Javaで親クラス(スーパークラス)のコンストラクタを呼び出すキーワードはどれですか?
ANSWERsuper()クリックして解説を表示EXPLANATIONsuper()を使用して親クラスのコンストラクタを呼び出します。子クラスのコンストラクタの最初に記述する必要があります。 - Q4
次のコードの出力は何ですか?
class Animal { void speak() { System.out.println("Animal speaks"); } } class Dog extends Animal { void speak() { System.out.println("Dog barks"); } } // main内で Animal a = new Dog(); a.speak();ANSWERDog barksクリックして解説を表示EXPLANATION実際のオブジェクトはDogなので、Dog の speak()メソッドが呼び出されます。これがポリモーフィズムです。
- Q5
Javaでメソッドのオーバーライドを明示的に示すアノテーションはどれですか?
ANSWER@Overrideクリックして解説を表示EXPLANATION@Overrideアノテーションはメソッドが親クラスのメソッドをオーバーライドしていることを明示します。 - Q6
メソッドのオーバーロードとは何ですか?
ANSWER同じ名前のメソッドを異なる引数で複数定義することクリックして解説を表示EXPLANATIONオーバーロードは同じ名前のメソッドを異なる引数リストで複数定義することです。
- Q7
次のコードはオーバーロードの例として正しいですか?
class Calculator { int add(int a, int b) { return a + b; } double add(double a, double b) { return a + b; } }ANSWER正しいオーバーロードの例クリックして解説を表示EXPLANATION引数の型が異なるため、これは正しいオーバーロードの例です。
- Q8
Javaのprotectedアクセス修飾子の意味はどれですか?
ANSWER同じパッケージ内およびサブクラスからアクセス可能クリックして解説を表示EXPLANATIONprotectedは同じパッケージ内およびサブクラスからアクセス可能です。 - Q9
Javaで抽象クラスを定義するキーワードはどれですか?
ANSWERabstractクリックして解説を表示EXPLANATIONabstractキーワードを使用して抽象クラスを定義します。抽象クラスはインスタンス化できません。 - Q10
抽象メソッドの特徴として正しいものはどれですか?
ANSWER本体を持たず、サブクラスで実装が必須クリックして解説を表示EXPLANATION抽象メソッドは本体(実装)を持たず、サブクラスで必ずオーバーライドして実装する必要があります。
- Q11
次のコードは正しいですか?
abstract class Animal { abstract void speak(); } Animal a = new Animal();ANSWERコンパイルエラーになるクリックして解説を表示EXPLANATION抽象クラスはインスタンス化できないため、コンパイルエラーになります。
- Q12
Javaでインターフェースを定義するキーワードはどれですか?
ANSWERinterfaceクリックして解説を表示EXPLANATIONinterfaceキーワードを使用してインターフェースを定義します。 - Q13
インターフェースを実装するために使用するキーワードはどれですか?
ANSWERimplementsクリックして解説を表示EXPLANATIONimplementsキーワードを使用してインターフェースを実装します。 - Q14
Javaのインターフェースのメソッドはデフォルトでどのような修飾子を持ちますか?
ANSWERpublic abstractクリックして解説を表示EXPLANATIONインターフェースのメソッドはデフォルトで
public abstractです(Java 8以降はdefaultメソッドも可能)。 - Q15
クラスは複数のインターフェースを実装できますか?
ANSWERできるクリックして解説を表示EXPLANATIONJavaでは多重継承はできませんが、複数のインターフェースを実装することは可能です。
- Q16
次のコードは正しいですか?
interface A { void methodA(); } interface B { void methodB(); } class C implements A, B { public void methodA() { } public void methodB() { } }ANSWER正しいコードであるクリックして解説を表示EXPLANATION複数のインターフェースを実装し、すべてのメソッドを実装しているため正しいコードです。
- Q17
Java 8以降でインターフェースに追加できるようになったメソッドタイプはどれですか?
ANSWERdefaultメソッドクリックして解説を表示EXPLANATIONJava 8からdefaultメソッドとstaticメソッドをインターフェースに定義できるようになりました。
- Q18
Javaで例外を発生させるキーワードはどれですか?
ANSWERthrowクリックして解説を表示EXPLANATIONthrowキーワードを使用して例外をスローします。 - Q19
メソッドがチェック例外をスローする可能性があることを宣言するキーワードはどれですか?
ANSWERthrowsクリックして解説を表示EXPLANATIONthrowsキーワードをメソッドシグネチャに追加して、スローする可能性のある例外を宣言します。 - Q20
Javaの例外処理で使用される3つのキーワードの組み合わせとして正しいものはどれですか?
ANSWERtry, catch, finallyクリックして解説を表示EXPLANATIONtry、catch、finallyが例外処理の基本的なキーワードです。
- Q21
finallyブロックの特徴として正しいものはどれですか?
ANSWER例外の有無にかかわらず必ず実行されるクリックして解説を表示EXPLANATIONfinallyブロックは例外の有無にかかわらず必ず実行されます。リソースのクリーンアップに使用されます。
- Q22
次のコードの出力は何ですか?
try { int result = 10 / 0; } catch (ArithmeticException e) { System.out.println("エラー"); } finally { System.out.println("終了"); }ANSWERエラー\n終了クリックして解説を表示EXPLANATIONゼロ除算でArithmeticExceptionが発生し、catchブロックで「エラー」が出力され、finallyブロックで「終了」が出力されます。
- Q23
チェック例外とは何ですか?
ANSWERコンパイル時にチェックされ、処理が必須の例外クリックして解説を表示EXPLANATIONチェック例外はコンパイル時にチェックされる例外で、try-catchまたはthrowsで処理する必要があります。
- Q24
RuntimeExceptionのサブクラスはどのような例外ですか?
ANSWER非チェック例外(実行時例外)クリックして解説を表示EXPLANATIONRuntimeExceptionのサブクラスは非チェック例外で、コンパイル時のチェックが不要です。
- Q25
NullPointerExceptionはどのような場合に発生しますか?
ANSWERnull参照に対してアクセスした場合クリックして解説を表示EXPLANATIONNullPointerExceptionはnull参照に対してメソッド呼び出しやフィールドアクセスを行った場合に発生します。
- Q26
ArrayIndexOutOfBoundsExceptionはどのような場合に発生しますか?
ANSWER配列の範囲外のインデックスにアクセスした場合クリックして解説を表示EXPLANATION配列の有効なインデックス範囲外にアクセスしようとした場合に発生します。
- Q27
複数の例外をキャッチする正しい方法はどれですか?(Java 7以降)
ANSWERcatch (Exception1 | Exception2 e)クリックして解説を表示EXPLANATIONJava 7以降では
|を使用して複数の例外を1つのcatchブロックでキャッチできます。 - Q28
try-with-resources文の目的は何ですか?
ANSWERリソースを自動的にクローズするクリックして解説を表示EXPLANATIONtry-with-resourcesは自動的にリソースをクローズするための構文で、AutoCloseableを実装したリソースに使用します。
- Q29
Java Collectionsフレームワークの主要なインターフェースでないものはどれですか?
ANSWERArrayクリックして解説を表示EXPLANATIONArrayはインターフェースではなく、基本的な配列型です。主要なインターフェースはList、Set、Map、Queueです。 - Q30
ArrayListの特徴として正しいものはどれですか?
ANSWER動的にサイズが変わり、ランダムアクセスが高速クリックして解説を表示EXPLANATIONArrayListは動的にサイズが変わる配列で、インデックスによる高速なランダムアクセスが可能です。
- Q31
次のコードでArrayListを正しく宣言しているのはどれですか?
ANSWERArrayList<String> list = new ArrayList<>();クリックして解説を表示EXPLANATIONジェネリクスを使用して
ArrayList<String>のように型パラメータを指定します。 - Q32
ArrayListに要素を追加するメソッドはどれですか?
ANSWERadd()クリックして解説を表示EXPLANATIONadd()メソッドを使用してArrayListに要素を追加します。 - Q33
次のコードの出力は何ですか?
ArrayList<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); System.out.println(list.size());ANSWER3クリックして解説を表示EXPLANATION3つの要素が追加されているので、size()は3を返します。
- Q34
ArrayListから要素を取得するメソッドはどれですか?
ANSWERget()クリックして解説を表示EXPLANATIONget(int index)メソッドを使用して指定したインデックスの要素を取得します。 - Q35
ArrayListから要素を削除するメソッドはどれですか?
ANSWERremove()クリックして解説を表示EXPLANATIONremove()メソッドを使用してインデックスまたはオブジェクトを指定して要素を削除します。 - Q36
LinkedListとArrayListの違いとして正しいものはどれですか?
ANSWERLinkedListは中間への挿入/削除が高速クリックして解説を表示EXPLANATIONLinkedListは双方向連結リストで、中間への挿入/削除が高速ですが、ランダムアクセスは遅いです。
- Q37
HashSetの特徴として正しいものはどれですか?
ANSWER重複を許可せず、順序は保証されないクリックして解説を表示EXPLANATIONHashSetは重複を許可しないコレクションで、要素の順序は保証されません。
- Q38
次のコードの出力として正しいものはどれですか?
HashSet<Integer> set = new HashSet<>(); set.add(1); set.add(2); set.add(1); System.out.println(set.size());ANSWER2クリックして解説を表示EXPLANATIONHashSetは重複を許可しないため、1は1回しか格納されず、サイズは2になります。
- Q39
TreeSetとHashSetの違いとして正しいものはどれですか?
ANSWERTreeSetは要素を並べ替えて保持するクリックして解説を表示EXPLANATIONTreeSetは要素を自然順序またはComparatorで並べ替えて保持します。
- Q40
HashMapの特徴として正しいものはどれですか?
ANSWERキーの重複は不可、値の重複は可クリックして解説を表示EXPLANATIONHashMapはキーと値のペアを格納し、キーの重複は許可しませんが、値の重複は許可します。
- Q41
HashMapに要素を追加するメソッドはどれですか?
ANSWERput()クリックして解説を表示EXPLANATIONput(key, value)メソッドを使用してキーと値のペアを追加します。 - Q42
HashMapから値を取得するメソッドはどれですか?
ANSWERget()クリックして解説を表示EXPLANATIONget(key)メソッドを使用してキーに対応する値を取得します。 - Q43
次のコードの出力は何ですか?
HashMap<String, Integer> map = new HashMap<>(); map.put("apple", 100); map.put("banana", 200); map.put("apple", 150); System.out.println(map.get("apple"));ANSWER150クリックして解説を表示EXPLANATION同じキー"apple"で再度put()すると値が上書きされるため、150が出力されます。
- Q44
HashMapのキーが存在するかチェックするメソッドはどれですか?
ANSWERcontainsKey()クリックして解説を表示EXPLANATIONcontainsKey(key)メソッドを使用してキーの存在をチェックします。 - Q45
HashMapのすべてのキーを取得するメソッドはどれですか?
ANSWERkeySet()クリックして解説を表示EXPLANATIONkeySet()メソッドを使用してすべてのキーのSetを取得します。 - Q46
Javaのジェネリクスの目的は何ですか?
ANSWERコンパイル時の型安全性を提供するクリックして解説を表示EXPLANATIONジェネリクスはコンパイル時の型安全性を提供し、キャストの必要性を減らします。
- Q47
次のジェネリッククラスの定義で、Tは何を表しますか?
class Box<T> { private T content; }ANSWER型パラメータ(プレースホルダー)クリックして解説を表示EXPLANATIONTは型パラメータで、クラスが使用される際に具体的な型に置き換えられます。
- Q48
次のコードは正しいですか?
ArrayList<int> list = new ArrayList<>();ANSWERコンパイルエラーになるクリックして解説を表示EXPLANATIONジェネリクスにはプリミティブ型を使用できません。Integerなどのラッパークラスを使用する必要があります。
- Q49
ジェネリクスのワイルドカード
?の意味は何ですか?ANSWER不明な型(任意の型)を表すクリックして解説を表示EXPLANATION?は不明な型を表すワイルドカードで、任意の型を受け入れることができます。 - Q50
<? extends Number>の意味は何ですか?ANSWERNumberまたはNumberのサブクラスを受け入れるクリックして解説を表示EXPLANATION上限境界ワイルドカードで、NumberまたはNumberのサブクラスを受け入れます。
- Q51
<? super Integer>の意味は何ですか?ANSWERIntegerまたはIntegerのスーパークラスを受け入れるクリックして解説を表示EXPLANATION下限境界ワイルドカードで、IntegerまたはIntegerのスーパークラスを受け入れます。
- Q52
Iteratorの目的は何ですか?
ANSWERコレクションの要素を順番に走査するクリックして解説を表示EXPLANATIONIteratorはコレクションの要素を順番に走査するためのインターフェースです。
- Q53
Iteratorで次の要素が存在するかチェックするメソッドはどれですか?
ANSWERhasNext()クリックして解説を表示EXPLANATIONhasNext()メソッドは次の要素が存在する場合にtrueを返します。 - Q54
Iteratorで次の要素を取得するメソッドはどれですか?
ANSWERnext()クリックして解説を表示EXPLANATIONnext()メソッドは次の要素を返し、カーソルを進めます。 - Q55
Collections.sort()メソッドは何をしますか?
ANSWERListを並べ替えるクリックして解説を表示EXPLANATIONCollections.sort()はListを自然順序または指定されたComparatorで並べ替えます。
- Q56
Comparableインターフェースの目的は何ですか?
ANSWERオブジェクトの自然順序を定義するクリックして解説を表示EXPLANATIONComparableインターフェースはオブジェクトの自然順序を定義するためのインターフェースです。
- Q57
Comparableインターフェースで実装するメソッドはどれですか?
ANSWERcompareTo()クリックして解説を表示EXPLANATIONcompareTo(T o)メソッドを実装して、自然順序を定義します。 - Q58
compareTo()メソッドが負の値を返す場合、何を意味しますか?
ANSWERthisオブジェクトは引数より小さいクリックして解説を表示EXPLANATION負の値を返す場合、thisオブジェクトは引数のオブジェクトより小さい(先に来る)ことを意味します。
- Q59
Comparatorインターフェースの目的は何ですか?
ANSWER外部的な比較ロジックを定義するクリックして解説を表示EXPLANATIONComparatorはオブジェクトの外部的な比較ロジックを定義するためのインターフェースです。
- Q60
Comparatorインターフェースで実装するメソッドはどれですか?
ANSWERcompare()クリックして解説を表示EXPLANATIONcompare(T o1, T o2)メソッドを実装して、2つのオブジェクトを比較します。
- Q61
ObjectクラスのtoString()メソッドの目的は何ですか?
ANSWERオブジェクトの文字列表現を返すクリックして解説を表示EXPLANATIONtoString()メソッドはオブジェクトの文字列表現を返します。デバッグやログ出力に便利です。
- Q62
ObjectクラスのhashCode()メソッドの目的は何ですか?
ANSWERオブジェクトのハッシュコードを返すクリックして解説を表示EXPLANATIONhashCode()メソッドはオブジェクトのハッシュコードを返します。HashMapやHashSetで使用されます。
- Q63
equals()とhashCode()の関係として正しいものはどれですか?
ANSWERequals()がtrueなら同じhashCode()を返すべきクリックして解説を表示EXPLANATIONequals()がtrueを返す2つのオブジェクトは、同じhashCode()を返す必要があります(契約)。
- Q64
Enumの特徴として正しいものはどれですか?
ANSWER固定された定数の集合を定義するクリックして解説を表示EXPLANATIONEnumは固定された定数の集合を定義し、型安全性を提供します。
- Q65
次のEnumの定義として正しいものはどれですか?
ANSWERenum Day { MON, TUE, WED }クリックして解説を表示EXPLANATIONEnumは
enumキーワードで定義し、定数をカンマ区切りで列挙します。 - Q66
Enumのvalues()メソッドは何を返しますか?
ANSWERすべての定数を含む配列クリックして解説を表示EXPLANATIONvalues()メソッドはEnum定数をすべて含む配列を返します。
- Q67
内部クラス(インナークラス)とは何ですか?
ANSWER別のクラスの内部に定義されたクラスクリックして解説を表示EXPLANATION内部クラスは別のクラスの内部に定義されたクラスで、外部クラスのメンバーにアクセスできます。
- Q68
静的内部クラス(static nested class)の特徴として正しいものはどれですか?
ANSWER外部クラスのインスタンスなしでアクセス可能クリックして解説を表示EXPLANATION静的内部クラスは外部クラスのインスタンスなしでアクセスでき、静的メンバーのみにアクセスできます。
- Q69
匿名クラス(anonymous class)とは何ですか?
ANSWER名前を持たず、その場で定義されるクラスクリックして解説を表示EXPLANATION匿名クラスは名前を持たないクラスで、インターフェースの実装やクラスの拡張をその場で行います。
- Q70
Javaでファイルを読み込むために一般的に使用されるクラスはどれですか?
ANSWERBufferedReaderクリックして解説を表示EXPLANATIONBufferedReaderやFileReaderなどがファイル読み込みに使用されます。
- Q71
Javaでファイルに書き込むために一般的に使用されるクラスはどれですか?
ANSWERBufferedWriterクリックして解説を表示EXPLANATIONBufferedWriterやFileWriterなどがファイル書き込みに使用されます。
- Q72
Fileクラスのexists()メソッドは何を返しますか?
ANSWERファイルが存在するかどうか(boolean)クリックして解説を表示EXPLANATIONexists()メソッドはファイルまたはディレクトリが存在する場合にtrueを返します。
- Q73
InputStreamとReaderの違いは何ですか?
ANSWERInputStreamはバイト、Readerは文字を処理クリックして解説を表示EXPLANATIONInputStreamはバイトストリーム(バイナリデータ)、Readerは文字ストリーム(テキストデータ)を処理します。
- Q74
java.nio.file.Pathクラスの目的は何ですか?
ANSWERファイルシステムのパスを表すクリックして解説を表示EXPLANATIONPathクラスはファイルシステムのパスを表し、パス操作を提供します(Java 7以降)。
- Q75
Filesクラス(java.nio.file)のreadAllLines()メソッドは何を返しますか?
ANSWERすべての行のList<String>クリックして解説を表示EXPLANATIONreadAllLines()メソッドはファイルのすべての行をList<String>として返します。
- Q76
StringBuilderとStringの違いは何ですか?
ANSWERStringBuilderは可変、Stringは不変クリックして解説を表示EXPLANATIONStringBuilderは可変(mutable)で効率的に文字列を操作でき、Stringは不変(immutable)です。
- Q77
StringBuilderで文字列を追加するメソッドはどれですか?
ANSWERappend()クリックして解説を表示EXPLANATIONappend()メソッドを使用してStringBuilderに文字列を追加します。 - Q78
StringBufferとStringBuilderの違いは何ですか?
ANSWERStringBufferはスレッドセーフ、StringBuilderは非スレッドセーフクリックして解説を表示EXPLANATIONStringBufferはスレッドセーフ(synchronized)ですが、StringBuilderは非スレッドセーフで高速です。
- Q79
Objectクラスのclone()メソッドの目的は何ですか?
ANSWERオブジェクトのコピーを作成するクリックして解説を表示EXPLANATIONclone()メソッドはオブジェクトのコピー(複製)を作成します。Cloneableインターフェースの実装が必要です。
- Q80
浅いコピー(shallow copy)と深いコピー(deep copy)の違いは何ですか?
ANSWER浅いコピーは参照をコピー、深いコピーはオブジェクト自体をコピークリックして解説を表示EXPLANATION浅いコピーは参照をコピーし、深いコピーは参照先のオブジェクトも再帰的にコピーします。
- Q81
instanceof演算子の目的は何ですか?
ANSWERオブジェクトが特定の型のインスタンスかチェックするクリックして解説を表示EXPLANATIONinstanceofはオブジェクトが特定のクラスまたはインターフェースのインスタンスかどうかをチェックします。
- Q82
次のコードの出力は何ですか?
String s = "Hello"; System.out.println(s instanceof String);ANSWERtrueクリックして解説を表示EXPLANATIONsはString型のインスタンスなので、trueが出力されます。
- Q83
アップキャスト(upcasting)とは何ですか?
ANSWERサブクラスからスーパークラスへの変換クリックして解説を表示EXPLANATIONアップキャストはサブクラスのオブジェクトをスーパークラス型として扱うことで、暗黙的に行われます。
- Q84
ダウンキャスト(downcasting)とは何ですか?
ANSWERスーパークラスからサブクラスへの変換クリックして解説を表示EXPLANATIONダウンキャストはスーパークラス型のオブジェクトをサブクラス型に変換することで、明示的なキャストが必要です。
- Q85
ClassCastExceptionはどのような場合に発生しますか?
ANSWER互換性のない型へのキャストを行った場合クリックして解説を表示EXPLANATION無効なキャスト(実際の型と互換性のない型へのキャスト)を行った場合に発生します。
- Q86
finalクラスの特徴は何ですか?
ANSWER継承できないクリックして解説を表示EXPLANATIONfinalクラスは継承できません。Stringクラスなどがその例です。
- Q87
finalメソッドの特徴は何ですか?
ANSWERオーバーライドできないクリックして解説を表示EXPLANATIONfinalメソッドはサブクラスでオーバーライドできません。
- Q88
Optionalクラス(Java 8)の目的は何ですか?
ANSWERnullの可能性がある値を安全に扱うクリックして解説を表示EXPLANATIONOptionalはnullの可能性がある値を安全に扱うためのコンテナクラスです。NullPointerExceptionを防ぐのに役立ちます。
- Q89
Optional.of()とOptional.ofNullable()の違いは何ですか?
ANSWERof()はnull不可、ofNullable()はnull許容クリックして解説を表示EXPLANATIONof()はnullを渡すと例外をスローしますが、ofNullable()はnullを許容して空のOptionalを返します。
- Q90
Optional.isPresent()メソッドは何を返しますか?
ANSWER値が存在するかどうか(boolean)クリックして解説を表示EXPLANATIONisPresent()は値が存在する場合にtrue、空の場合にfalseを返します。
- Q91
Optional.orElse()メソッドの目的は何ですか?
ANSWER値またはデフォルト値を返すクリックして解説を表示EXPLANATIONorElse()は値が存在する場合はその値を、存在しない場合は指定したデフォルト値を返します。
- Q92
Optional.orElseThrow()メソッドの目的は何ですか?
ANSWER値がなければ例外をスロー、あれば値を返すクリックして解説を表示EXPLANATIONorElseThrow()は値が存在する場合はその値を返し、存在しない場合は例外をスローします。
- Q93
LinkedHashMapの特徴として正しいものはどれですか?
ANSWER挿入順序を保持するクリックして解説を表示EXPLANATIONLinkedHashMapは挿入順序(またはアクセス順序)を保持するHashMapの拡張です。
- Q94
TreeMapの特徴として正しいものはどれですか?
ANSWERキーでソートされた順序を保持するクリックして解説を表示EXPLANATIONTreeMapはキーの自然順序またはComparatorでソートされた順序を保持します。
- Q95
ArrayDequeの特徴として正しいものはどれですか?
ANSWER両端から操作可能な可変長配列クリックして解説を表示EXPLANATIONArrayDequeは両端から要素を追加・削除できる可変長配列で、スタックやキューとして使用できます。
- Q96
PriorityQueueの特徴として正しいものはどれですか?
ANSWER優先度に基づいて要素を取り出すクリックして解説を表示EXPLANATIONPriorityQueueは優先度に基づいて要素を取り出すキューで、最小(または最大)の要素が先頭に来ます。
- Q97
Collections.unmodifiableList()メソッドの目的は何ですか?
ANSWER変更不可能なリストのビューを返すクリックして解説を表示EXPLANATIONunmodifiableList()は変更不可能なリストのビューを返します。元のリストを変更すると反映されます。
- Q98
List.of()メソッド(Java 9)の特徴として正しいものはどれですか?
ANSWER不変リストを作成するクリックして解説を表示EXPLANATIONList.of()は不変のリストを作成します。nullは許可されず、変更操作は例外をスローします。
- Q99
Map.of()メソッド(Java 9)の特徴として正しいものはどれですか?
ANSWER不変Mapを作成するクリックして解説を表示EXPLANATIONMap.of()は不変のMapを作成します。nullキー/値は許可されず、変更操作は例外をスローします。
- Q100
Set.of()メソッド(Java 9)の特徴として正しいものはどれですか?
ANSWER不変Setを作成するクリックして解説を表示EXPLANATIONSet.of()は不変のSetを作成します。nullや重複要素は許可されず、変更操作は例外をスローします。