私は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);
}
私は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);
}
add
追加が成功したかどうかを示す指示を返すために、Collection
インターフェースで指定されます。boolean
Javadocから:
呼び出しの結果としてこのコレクションが変更された場合はtrueを返します。(このコレクションが重複を許可せず、指定された要素がすでに含まれている場合はfalseを返します。)
このコードは、追加が失敗した場合にメッセージを出力します。これは、セットに重複がある場合に発生します。
コレクションsにすでにアイテムaがある場合、addメソッドはfalseを返します。!!は「not」演算子であり、そのfalseをtrueに変換します。したがって、アイテムがすでにコレクションにある場合は、printlnの結果が表示されます。
s.add()は、アイテムがコレクションに追加されたか(true)、そうでないか(false)に応じてブール値を返します。
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);
}
}
追加が失敗した場合、メッセージが表示されます。
他の人が答えたように、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);
}
}
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)).
s.add(a)
a
セットにまだ含まれていない場合にのみ、セットに追加されます(同等に)。このadd
メソッドはtrue
、操作によってセットが変更された場合に戻ります。
したがって、aがすでにに含まれているSet
場合、add
メソッドはそれを再度追加しないため、セットを変更しないfalse
ため、を返します。
ドキュメントから:
指定された要素がまだ存在しない場合は、このセットに追加します
このセットにすでに要素が含まれている場合、呼び出しはセットを変更せずに残し、falseを返します。
「!」「NOT」の記号です。
次のように読みます。
「ハッシュセット s に引数 a を追加しない場合、...」
また
「ハッシュセット s に引数 a を追加すると false が返される場合、...」
Set データ構造には、一意の値のみを含めることができます。
オブジェクトを追加できなかった場合 (つまり、エントリが重複している場合)、メソッド add(Object) は false を返します。
オブジェクトがセットに追加された場合、メソッドは true を返します。
Set オブジェクトは複製を許可しません。HashSet オブジェクトも重複を許可しませんが、get() メソッド ( put() と contains() も) は一定時間 O(k) で実行されるため、重複をチェックする良い方法です。