-1
public class TestSet {
  public static void main(String[] args){
    Set s = new LinkedHashSet();
    s.add("Windows");
    s.add("Mac");
    s.add("Mac");
    s.add("Unix");
    System.out.println(s); 
  }
}

根据定义.. set 不应该允许重复值......当 add 方法试图插入重复值时......它应该返回 false....但是为什么这段代码给出的输出为 [windows,mac,unix]而不是错误??

4

3 回答 3

2

Set#addtrue如果此集合尚未包含指定的元素 else ,则返回falseException如果值是重复的,它不会触发。

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

查找有关文档的更多信息

boolean result = s.add("Mac"); // would be true
boolean result1 = s.add("Mac");// would be false
于 2013-08-23T07:11:01.207 回答
0

集合接口就像集合的数学抽象。无需抛出异常。

于 2013-08-23T07:13:58.623 回答
0

您可以看到集合的大小。它将省略任何重复项。这将在您的情况下打印 3

System.out.println(s.size());
于 2013-08-23T07:35:13.520 回答