我是 Java 初学者,不明白if(!s.add(a))
这段代码摘录的含义:
Set<String> s = new HashSet<String>();
for(String a:args) {
if(!s.add(a)) System.out.println("Duplicate detected:"+a);
}
我是 Java 初学者,不明白if(!s.add(a))
这段代码摘录的含义:
Set<String> s = new HashSet<String>();
for(String a:args) {
if(!s.add(a)) System.out.println("Duplicate detected:"+a);
}
add
Collection
接口中指定返回a boolean
,表示添加是否成功。来自 Javadocs:
如果此集合因调用而更改,则返回 true。(如果此集合不允许重复且已包含指定元素,则返回 false。)
如果添加不成功,此代码会打印出一条消息,当集合中有重复时会发生这种情况。
如果集合 s 已经有项目 a,那么 add 方法将返回 false。这 !是一个“非”运算符,将错误变为真。因此,如果该项目已经在集合中,您将看到 println 结果。
s.add() 将返回一个布尔值,具体取决于项目是否已添加到集合中 (true) 或未添加 (false)
add 方法返回一个布尔值,指示添加是否成功。缩进可能更清楚:
Set<String> s = new HashSet<String>();
for(String a:args)
if(!s.add(a))
System.out.println("Duplicate detected:"+a);
或者使用大括号更好:
Set<String> s = new HashSet<String>();
for(String a:args) {
if(!s.add(a)) {
System.out.println("Duplicate detected:"+a);
}
}
如果添加失败,则会显示该消息。
正如其他人回答的那样, add 返回一个布尔值,指示 a 是否已添加到集合中。它相当于
Set<String> s = new HashSet<String>();
for(String a:args) {
if (s.contains(a)){
System.out.println("Duplicate detected:"+a);
}
else{
s.add(a);
}
}
contains boolean contains(Object o) Returns true if this set contains the specified element. More formally, returns true if and only if this set contains an element e such that (o==null ? e==null :o.equals(e)).
s.add(a)
a
如果它尚未包含在集合中(通过相等),则只会添加到集合中。如果操作导致集合被修改,则该add
方法返回。true
因此,如果 a 已经在 中Set
,则该add
方法不会再次添加它,因此不会修改集合,因此返回false
。
从文档:
如果指定的元素尚不存在,则将其添加到此集合中
如果该集合已包含该元素,则调用将保持该集合不变并返回 false。
“!” 是'NOT'的符号。
读作:
'如果不将参数 a 添加到 hashset s,那么...'
或者
'如果将参数 a 添加到 hashset s 返回 false,则...'
Set 数据结构只能包含唯一值。
如果无法添加对象(即它是重复条目),方法 add(Object) 将返回 false。
如果对象被添加到集合中,该方法将返回 true。
没有 Set 对象允许重复。HashSet 对象也不允许重复,但 get() 方法( put() 和 contains() 也是)在恒定时间 O(k) 中运行,因此它是检查重复的好方法。
供您参考:
import java.util.Set;
import java.util.HashSet;
public class s1 {
public static final boolean DUPLICATE = false;
public static void main( String[] args ) {
Set<String> s = new HashSet<String>();
if (!s.add("Hello Bub")) System.out.println("Duplicate detected(1)");
if (s.add("Hello Bub") == DUPLICATE) System.out.println("Duplicate detected(2)");
}
}
哪个看起来更清楚?