我正在通过Oracle Docs Java中的Java Oracle Docs 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);
}
}我没办法拿到这些台词。有人能解释一下这里到底发生了什么吗? 对于(字符串a: args) if (!uniques.add(a)) dups.add(a);
发布于 2016-12-25 22:50:26
从Oracle文档中提取Set的add方法
如果此集合尚未包含指定的元素,则为
true。
因此,代码所做的是:
for (String a : args):迭代存储在args数组中的所有输入字符串。if (!uniques.add(a)):如果add方法返回true,则字符串是唯一的,并且成功地添加到Set uniques中,因为它还没有包含(参见docs)。否则,add方法将返回false (当前字符串a已经包含在Set uniques中),因此.dups.add(a);:将其转换为重复元素的Set。作为初学者的注意事项,Set只能包含单个元素(一次)。因此,如果a已经在uniques中,调用uniques.add(a)将只返回true,但是实际上不会添加任何内容。如果没有,则添加元素并返回false。
发布于 2016-12-25 22:51:44
来自有关add的文档:
返回:如果此集合尚未包含指定的元素,则为true。
这意味着代码“尝试”将对象插入到uniques中,如果add返回对象,则该对象已经存在,这意味着它实际上是一个重复--因此,如果uniques.add是false,则将其插入到dups中。
之后,dups中的所有条目都将从uniques中删除。
uniques.removeAll(dups);在此之后,uniques只包含一次字符串,而dups只包含多次发生的所有字符串。
发布于 2016-12-25 22:52:08
if (!uniques.add(a))如果添加的单词尚未在集合中,则uniques.add(a)将返回True。如果它在其中,则为False (此方法具有布尔类型的返回)。
dups.add(a);因此,如果它看到这个词已经在集合中,它会将它添加到dupes集合中。
希望这能帮上忙!
https://stackoverflow.com/questions/41325044
复制相似问题