2016-12-25 20 views
2

Java CollectionsOracle Docs Javaに送信しています。私は以下のコード行をいくつか見つけ出すことができません。

このプログラムは、重複する単語、一意の単語を分割します。コレクションを使用して一意の重複単語を検索するJava

public class FindDups { 
    public static void main(String[] args) { 
     Set<String> uniques = new HashSet<String>(); 
     Set<String> dups = new HashSet<String>(); 

     for (String a : args) 
      if (!uniques.add(a)) 
       dups.add(a); 

     // Destructive set-difference 
     uniques.removeAll(dups); 

     System.out.println("Unique words: " + uniques); 
     System.out.println("Duplicate words: " + dups); 
    } 
} 

私はこれらの行を取得することはできませんよ。誰でも説明できますが、実際には ここで起こっていることはありますか? Setadd方法についてOracle docsから

for (String a : args) 
    if (!uniques.add(a)) 
     dups.add(a); 

答えて

2

trueは、このセットは、すでに指定された要素

が含まれていなかった場合は、だから何のコードがないことである。

  1. for (String a : args)args配列に格納されているすべての入力文字列を繰り返し処理します。
  2. if (!uniques.add(a)):addメソッドがtrueを返した場合、その文字列は一意であり、Setuniquesにはまだ含まれていません(ドキュメントを参照)。それ以外の場合は、add方法はfalse(現在の文字列aがすでにSetuniquesに含まれている)ので...
  3. dups.add(a);を返します...重複要素のSetに追加します。初心者のための注意点として

Setは一度個々の要素をのみ含めることができます。したがって、aがすでにuniquesにある場合、uniques.add(a)trueを返しますが、は実際にはを追加しません。そうでない場合、要素は追加され、falseを返します。 addに関するドキュメントから

2

戻り値: 真のこのセットは、すでにコードを意味し、指定された要素

uniquesにオブジェクトを挿入するには、「しよう」含まれていなかった場合と、 addfalseを返す場合、オブジェクトは既に存在しています。つまり、実際に重複していることを意味します。uniques.addfalseの場合はdupsに挿入されます。

その後dups内のすべてのエントリがuniquesから削除されます:dupsが複数回発生したすべての文字列が含まれていながら、そのuniquesだけ一度だけ存在文字列が含まれてい

uniques.removeAll(dups); 

後。

1
if (!uniques.add(a)) 

uniques.add(a)は、追加された単語がすでにセットに含まれていない場合はTrueを返します。内部にある場合はFalse(このメソッドはBoolean型の戻り値を持ちます)。

 dups.add(a); 

したがって、単語が既にセットに含まれていることがわかると、それはそのセットに追加されます。

希望に役立ちます!

関連する問題