19
4

2 に答える 2

43

使用するCollections.emptySet():

空のセット (不変) を返します。このセットはシリアライズ可能です。同名のフィールドとは異なり、このメソッドはパラメーター化されています。この例は、空のセットを取得するタイプ セーフな方法を示しています。

 Set<String> s = Collections.emptySet();   

実装上の注意: このメソッドの実装では、呼び出しごとに個別の Set オブジェクトを作成する必要はありません。この方法を使用すると、同じ名前のフィールドを使用する場合と同等のコストがかかる可能性があります。(このメソッドとは異なり、フィールドはタイプ セーフを提供しません。)

于 2012-07-10T13:46:32.317 に答える
14

を使用nullして空のセットを表すのは悪い考えです。(明らかに) に対して操作を実行しようとすると、 がスローされるため、はのnullようには動作しません。つまり、 を使用して空のセットを表すと、コードに... のテストが散らばり、1 つでも見逃すとバグが発生することになります。SetNullPointerExceptionnullnull

実用的な解決策はCollections.emptySet()、不変の空のセットが必要な場合は を使用するか、空で始まる可変セットが必要な場合は適切なSetクラス (例: ) のインスタンスを作成することです。new HashSet<>()


質問を読み直すと、あなたが私の最初の理解とは異なることを意味している可能性があることに気付きました。

Java で数学的集合論の概念をゼロから実装/モデル化しようとしている場合Set、おそらく不変クラスとして実装するでしょう。(数学では、物事を変更することはありません!) 空のセットは、Set要素を含まない単なるインスタンスです。特別な取り扱いは必要ありません。

NULL概念は必須ではありません...「null」、「未定義のセット」、またはセットの数学的モデルに同様の概念を具体的に取り入れようとしている場合を除きます。(もしそうなら、あなたのモデルを理解せずにあなたにアドバイスできるかどうかはわかりません...数学的な観点から.)

于 2012-07-10T14:53:16.887 に答える