将重复项添加到Set时,为什么不出错?

时间:2014-11-14 10:03:43

标签: java set

我向Set添加了两次相同的整数,但是尽管Set不允许重复,但它不会给出任何错误。这是为什么?

 Set<Integer> set = new HashSet<Integer>();
 set.add(1);
 set.add(1);

3 个答案:

答案 0 :(得分:6)

当您尝试添加Set:add中已有的值时,

Set不应该给您一个错误。它只会返回false而不会将值添加到Set

检查JavaDoc

  

布尔加法(E e)

     

如果指定的元素尚不存在,则将其添加到此集合中(可选操作)。更正式地,如果集合不包含元素e2,则将指定的元素e添加到该集合中(e == null?e2 == null:e.equals(e2))。如果此set已包含该元素,则调用将保持set不变并返回false。结合对构造函数的限制,这可以确保集合永远不会包含重复元素。

答案 1 :(得分:1)

Set.add返回一个布尔值。如果项目已在集合中,则返回值为false。

所以如果你有选择的话。要么...

if (!set.add(i)) {
    // item already in set; not added
}

......或

if (set.contains(i)) {
    // item already in set
}

答案 2 :(得分:1)

查看官方JAVA文档,了解有关添加方法的更多信息:https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#add%28E%29

如果Set已经包含元素,它将返回false。