1

我是 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);
}
4

11 回答 11

10

addCollection接口中指定返回a boolean,表示添加是否成功。来自 Javadocs:

如果此集合因调用而更改,则返回 true。(如果此集合不允许重复且已包含指定元素,则返回 false。)

如果添加不成功,此代码会打印出一条消息,当集合中有重复时会发生这种情况。

于 2009-06-29T14:18:14.553 回答
6

如果集合 s 已经有项目 a,那么 add 方法将返回 false。这 !是一个“非”运​​算符,将错误变为真。因此,如果该项目已经在集合中,您将看到 println 结果。

于 2009-06-29T14:19:27.063 回答
3

s.add() 将返回一个布尔值,具体取决于项目是否已添加到集合中 (true) 或未添加 (false)

于 2009-06-29T14:17:57.020 回答
2

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);
    }
}

如果添加失败,则会显示该消息。

于 2009-06-29T14:18:14.257 回答
2

正如其他人回答的那样, 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);
    }
}

来自Set 接口的 javadoc。

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)).
于 2009-06-29T14:20:51.273 回答
1

s.add(a)a如果它尚未包含在集合中(通过相等),则只会添加到集合中。如果操作导致集合被修改,则该add方法返回。true

因此,如果 a 已经在 中Set,则该add方法不会再次添加它,因此不会修改集合,因此返回false

于 2009-06-29T14:18:37.597 回答
0

从文档:

如果指定的元素尚不存在,则将其添加到此集合中

如果该集合已包含该元素,则调用将保持该集合不变并返回 false。

于 2009-06-29T14:19:42.320 回答
0

“!” 是'NOT'的符号。

读作:

'如果不将参数 a 添加到 hashset s,那么...'

或者

'如果将参数 a 添加到 hashset s 返回 false,则...'

于 2009-06-29T14:21:15.873 回答
0

Set 数据结构只能包含唯一值。

如果无法添加对象(即它是重复条目),方法 add(Object) 将返回 false。

如果对象被添加到集合中,该方法将返回 true。

于 2009-06-29T14:23:41.550 回答
0

没有 Set 对象允许重复。HashSet 对象也不允许重复,但 get() 方法( put() 和 contains() 也是)在恒定时间 O(k) 中运行,因此它是检查重复的好方法。

于 2009-06-29T14:24:37.227 回答
0

供您参考:

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)");
    }
}

哪个看起来更清楚?

于 2016-01-25T03:36:55.037 回答