1

私はJavaの初心者でありif(!s.add(a))、このコードの抜粋で何を意味するのか理解していません。

Set<String> s = new HashSet<String>();
for(String a:args) {
    if(!s.add(a)) System.out.println("Duplicate detected:"+a);
}
4

11 に答える 11

10

add追加が成功したかどうかを示す指示を返すために、Collectionインターフェースで指定されます。booleanJavadocから:

呼び出しの結果としてこのコレクションが変更された場合はtrueを返します。(このコレクションが重複を許可せず、指定された要素がすでに含まれている場合はfalseを返します。)

このコードは、追加が失敗した場合にメッセージを出力します。これは、セットに重複がある場合に発生します。

于 2009-06-29T14:18:14.553 に答える
6

コレクションsにすでにアイテムaがある場合、addメソッドはfalseを返します。!!は「not」演算子であり、そのfalseをtrueに変換します。したがって、アイテムがすでにコレクションにある場合は、printlnの結果が表示されます。

于 2009-06-29T14:19:27.063 に答える
3

s.add()は、アイテムがコレクションに追加されたか(true)、そうでないか(false)に応じてブール値を返します。

于 2009-06-29T14:17:57.020 に答える
2

addメソッドは、addが成功したかどうかを示すブール値を返します。インデントを使用すると、より明確になる可能性があります。

Set<String> s = new HashSet<String>();
for(String a:args)
    if(!s.add(a))
        System.out.println("Duplicate detected:"+a);

または中かっこでさらに良い:

Set<String> s = new HashSet<String>();
for(String a:args) {
    if(!s.add(a)) {
            System.out.println("Duplicate detected:"+a);
    }
}

追加が失敗した場合、メッセージが表示されます。

于 2009-06-29T14:18:14.257 に答える
2

他の人が答えたように、addはaがセットに追加されたかどうかを示すブール値を返します。と同等

Set<String> s = new HashSet<String>();
for(String a:args) {
    if (s.contains(a)){
      System.out.println("Duplicate detected:"+a);
    }
    else{
       s.add(a);
    }
}

Setインターフェースのjavadocから。

contains

boolean contains(Object o)

     Returns true if this set contains the specified element.
     More formally, returns true if and only if this set contains
     an element e such that (o==null ? e==null :o.equals(e)).
于 2009-06-29T14:20:51.273 に答える
1

s.add(a)aセットにまだ含まれていない場合にのみ、セットに追加されます(同等に)。このaddメソッドはtrue、操作によってセットが変更された場合に戻ります。

したがって、aがすでにに含まれているSet場合、addメソッドはそれを再度追加しないため、セットを変更しないfalseため、を返します。

于 2009-06-29T14:18:37.597 に答える
0

ドキュメントから:

指定された要素がまだ存在しない場合は、このセットに追加します

このセットにすでに要素が含まれている場合、呼び出しはセットを変更せずに残し、falseを返します。

于 2009-06-29T14:19:42.320 に答える
0

「!」「NOT」の記号です。

次のように読みます。

「ハッシュセット s に引数 a を追加しない場合、...」

また

「ハッシュセット s に引数 a を追加すると false が返される場合、...」

于 2009-06-29T14:21:15.873 に答える
0

Set データ構造には、一意の値のみを含めることができます。

オブジェクトを追加できなかった場合 (つまり、エントリが重複している場合)、メソッド add(Object) は false を返します。

オブジェクトがセットに追加された場合、メソッドは true を返します。

于 2009-06-29T14:23:41.550 に答える
0

Set オブジェクトは複製を許可しません。HashSet オブジェクトも重複を許可しませんが、get() メソッド ( put() と contains() も) は一定時間 O(k) で実行されるため、重複をチェックする良い方法です。

于 2009-06-29T14:24:37.227 に答える