首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用集合Java查找唯一的、重复的单词

使用集合Java查找唯一的、重复的单词
EN

Stack Overflow用户
提问于 2016-12-25 22:42:30
回答 3查看 307关注 0票数 2

我正在通过Oracle Docs Java中的Java Oracle Docs Java。我无法从下面找出几行代码。

这个程序分裂重复的单词,独特的单词。

代码语言:javascript
复制
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);
    }
}

我没办法拿到这些台词。有人能解释一下这里到底发生了什么吗? 对于(字符串a: args) if (!uniques.add(a)) dups.add(a);

EN

回答 3

Stack Overflow用户

发布于 2016-12-25 22:50:26

Oracle文档中提取Setadd方法

如果此集合尚未包含指定的元素,则为true

因此,代码所做的是:

  1. for (String a : args):迭代存储在args数组中的所有输入字符串。
  2. if (!uniques.add(a)):如果add方法返回true,则字符串是唯一的,并且成功地添加到Set uniques中,因为它还没有包含(参见docs)。否则,add方法将返回false (当前字符串a已经包含在Set uniques中),因此.
  3. dups.add(a);:将其转换为重复元素的Set

作为初学者的注意事项,Set只能包含单个元素(一次)。因此,如果a已经在uniques中,调用uniques.add(a)将只返回true,但是实际上不会添加任何内容。如果没有,则添加元素并返回false

票数 2
EN

Stack Overflow用户

发布于 2016-12-25 22:51:44

来自有关add的文档:

返回:如果此集合尚未包含指定的元素,则为true。

这意味着代码“尝试”将对象插入到uniques中,如果add返回对象,则该对象已经存在,这意味着它实际上是一个重复--因此,如果uniques.addfalse,则将其插入到dups中。

之后,dups中的所有条目都将从uniques中删除。

代码语言:javascript
复制
uniques.removeAll(dups);

在此之后,uniques只包含一次字符串,而dups只包含多次发生的所有字符串。

票数 2
EN

Stack Overflow用户

发布于 2016-12-25 22:52:08

代码语言:javascript
复制
   if (!uniques.add(a))

如果添加的单词尚未在集合中,则uniques.add(a)将返回True。如果它在其中,则为False (此方法具有布尔类型的返回)。

代码语言:javascript
复制
       dups.add(a);

因此,如果它看到这个词已经在集合中,它会将它添加到dupes集合中。

希望这能帮上忙!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41325044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档