2009-06-29 10 views
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); 
} 

答えて

6

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

+1

if(s.add(a)== false)) – Sampson

3

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

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); 
    } 
} 

メッセージが表示されます。

+2

{}をforのplzに追加します。 – Macarse

+0

インデントを修正し、{}バージョンを追加しました(私のコードではないことを忘れないでください) –

10

Collection interfaceに指定され、追加が成功したかどうかを示すbooleanを返します。 Javadocsから:

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

このコードでは、追加に失敗した場合にメッセージが出力されます。

1

s.add(a)は、セットにまだ含まれていない場合(等号で)aをセットに追加するだけです。 addメソッドは、操作によってセットが変更される場合、trueを返します。 Setですでにだった場合

したがって、add方法はfalseを返すので、セットを変更するため、ない、再びそれを追加しないでしょう。

0

が、このセットはすでに 要素が含まれている場合、呼び出しは 変わらないとリターンのセットを残し、既に

存在しない場合、これに指定された要素が を設定追加偽です。

2

他の人が回答したように、addは、aがセットに追加されたかどうかを示すブール値を返します。 その同等javadoc for the Set interface.

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)). 
0

から

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

に "!" 'NOT'のシンボルです。

としてそれを読む: 'は、HashSetのsの引数aを追加しない場合は...'

OR

をさんは、その後、falseを返しHashSetのために引数を追加する場合は... '

0

設定データ構造には一意の値しか含めることができません。

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

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

0

いいえセットオブジェクトは重複を許可します。 HashSetオブジェクトは重複も許可しませんが、get()メソッド(put()とcontains()も)は一定時間O(k)で実行されるため、重複をチェックするのに適しています。ご検討のために提示

0

:明確なようだ

import java.util.Set; 
import java.util.HashSet; 

public class s1 { 
    public static final boolean DUPLICATE = false; 
    public static void main(String[] args) { 
     Set<String> s = new HashSet<String>(); 

     if (!s.add("Hello Bub")) System.out.println("Duplicate detected(1)"); 

     if (s.add("Hello Bub") == DUPLICATE) System.out.println("Duplicate detected(2)"); 
    } 
} 

関連する問題