这句话是什么意思?

时间:2009-06-29 14:16:12

标签: java collections set

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

11 个答案:

答案 0 :(得分:10)

add中指定了{p> Collection interface以返回boolean,表示添加是否成功。来自Javadocs:

  

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

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

答案 1 :(得分:6)

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

答案 2 :(得分:3)

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

答案 3 :(得分: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);
    }
}

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

答案 4 :(得分: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);
    }
}

来自javadoc for the Set interface.

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)).

答案 5 :(得分:1)

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

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

答案 6 :(得分:0)

来自文档:

  

将指定的元素添加到此集合中   如果它不存在

     

如果此组已包含   元素,调用离开集合   不变并返回false。

答案 7 :(得分:0)

“!”是'NOT'的符号。

将其读作:

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

OR

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

答案 8 :(得分:0)

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

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

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

答案 9 :(得分:0)

否Set对象允许重复。 HashSet对象也不允许重复,但get()方法(put()和contains()也是在常量时间O(k)中运行,因此这是检查重复项的好方法。

答案 10 :(得分: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)");
    }
}

哪个更清楚?