-1
public class TestSet {
  public static void main(String[] args){
    Set s = new LinkedHashSet();
    s.add("Windows");
    s.add("Mac");
    s.add("Mac");
    s.add("Unix");
    System.out.println(s); 
  }
}

定義によると.. set は重複する値を許可すべきではありません... add メソッドが重複する値を挿入しようとすると... false を返す必要があります....しかし、なぜこのコードは [windows,mac,unix] として出力を与えるのですか?エラーの代わりに??

4

3 に答える 3

2

Set#addtrueこのセットが指定された要素をまだ含んでいない場合に返しfalseます Exception値が重複している場合はスローしません。

指定された要素がまだ存在しない場合は、このセットに追加します (オプションの操作)。より正式には、(e==null ? e2==null : e.equals(e2)) となる要素 e2 がセットに含まれていない場合、指定された要素 e をこのセットに追加します。このセットにすでに要素が含まれている場合、呼び出しはセットを変更せずに false を返します。コンストラクターの制限と組み合わせることで、セットに重複する要素が決して含まれないようになります。

ドキュメントの詳細

boolean result = s.add("Mac"); // would be true
boolean result1 = s.add("Mac");// would be false
于 2013-08-23T07:11:01.207 に答える
0

セット インターフェイスは、セットの数学的抽象化のようなものです。例外をスローする必要はありません。

于 2013-08-23T07:13:58.623 に答える
0

セットのサイズを確認できます。重複は省略されます。この場合、3 が出力されます。

System.out.println(s.size());
于 2013-08-23T07:35:13.520 に答える