2014-04-12 48 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