2014-04-12 49 views
0

我試圖通過一個小程序,並不能真正完全理解它。在某種意義上說,我錯誤地認爲它確實如此,但我知道where =[]如果任何人都能指出我正確的方向,我會很感激。樹形圖通過

import java.util.*; 

public class Duplicates { 

    //Here we have a main method 


    public static void main(String[] args) 
    { 

    String[] words = args[0].split(" "); 
    Set<String> uniques = new TreeSet<String>(); 
    Set<String> duplicates = new TreeSet<String>(); 

    for (String s : words) { 
     if (!uniques.add(s)) { 
     duplicates.add(s); 
     } 
    } 

    uniques.removeAll(duplicates); 
    System.out.println("Unique words "+uniques); 
    System.out.print("Duplicate words "+duplicates); 
    } 

我明白它做了什麼(有點),但我不確定當你得到一個獨特的詞會發生什麼。正如在循環中,它說if (!unique.add(s)),這樣只會處理重複...?那麼當我們進入if語句時,它將處理duplicates.add(s)。所以,我不明白如何將唯一身份添加到獨特的集合?

+0

你甚至讀過[this](http://docs.oracle.com/javase/8/docs/api/java/util/Set.html)嗎?......如果你確實知道,那麼你會知道'Set's不能存儲重複項。 – Astrobleme

+1

閱讀Set.add()和Set.removeAll()的javadoc,然後在紙上逐步執行代碼,並帶有包含重複項的字符串示例列表。附註:HashSet對於這個程序來說是更好的選擇。 –

+0

是的,這是程序中的重點......這是一個演講中給我們的例子......我們刪除所有重複的東西。我然而不能通過/如果 – user3443834

回答

0

輸入字符串列表,輸出是不重複的那些名單。

在for循環中添加到集合(uniques)的所有輸入字符串,它是唯一字符串的集合。

如果添加for循環中的當前字符串用於設置add方法返回false。 在這種情況下,該字符串會添加到另一個集合(duplicates)。

循環結果應該是所有字符串沒有重複的一個。

現在想想如何計算所有字符串減去重複3次的字符串?

1
uniques.add(s)) 

添加指定的元素如果此集合,如果失敗,它已不存在 http://docs.oracle.com/javase/7/docs/api/java/util/Set.html

該方法返回一個布爾值,如果真和成功的假。感嘆號將布爾倒置,所以如果它返回false,那麼!使其成爲真實,並且可以繼續將其添加到重複集合中,如果重複集合已經存在於重複集合中,則它將失敗,從而在第一集合中給你一組唯一的唯一項目並將重複項目轉儲到第二集合中,但只計算首先每個唯一字符串重複。

重複集不應該是一個集合,因爲它不會統計總共有多少重複。

假設你輸入的 「ABC」, 「高清」, 「高清」

你會得到2個獨特的項目和1個重複。

但是,如果你輸入的「ABC」,「ABC」,「ABC」

因爲你第二次嘗試插入重複它會失敗,因爲一組你會得到1個獨特的項目和1次重複永遠不會讓你兩次添加同樣的東西。

然而,您的示例的目的似乎是在唯一集合中只輸入一次字詞,並在重複集合下輸入一次以上的字詞。

變化字符串[]線路此

String[] words = new String[] { "a", "a", "b", "c" }; 

您的輸出將是

唯一字並[b,C]

重複的單詞並[a]

這是因爲removeAll方法帶走了唯一集合中的任何項目,即我重複的集合。

+0

啊非常感謝!因此,如果我使用值「John」,「Joe」,「John」,那麼它將返回前兩個值,因爲它們是唯一值並將其添加到唯一值中,然後最後一個John將返回false並跟隨通過其他語句並添加到重複集? – user3443834

+0

@ user3443834準確地說,那麼removeAll方法會從唯一集合中刪除John,並且只有John在重複集合中。 – CodeCamper

0

只是舉個例子,走過去。

假設words = { "a", "b", "b", "c"}

現在開始"a"被添加到uniques
然後"b"被添加。

當第二個"b"出現時,uniques.add(s))返回false,因爲它已經包含元素"b"。所以"b"被添加到duplicates

然後"c"被添加到uniques

最後uniques.removeAll(duplicates)聲明刪除uniques中存在於duplicates中的所有元素。所以,你必須只出現在uniques一旦所有的元素和所有元素重複一次以上duplicates

+0

非常感謝幫助!但由於不允許重複,如果我們在例子中已經給出了三個重複值,例如A,A和A第三個A會發生什麼,因爲它會對兩個都返回false? – user3443834

+0

第三次它會返回false,所以它會嘗試添加到'duplicateates'。但由於它已經存在,它不會再被添加。 – GoldRoger