为什么addAll()不支持将集合的副本添加到集合中?

时间:2015-09-12 02:21:49

标签: java collections set

在方法中,我打两个电话。第一个调用构造并从另一个方法返回一个hashset。第二个调用将这个新构造的集添加到现有集中,作为参数传入此方法。

setOne.equals(setTwo) == true

通常,传入的集合(预先存在的集合)将添加另一个集合,其内容与其自身相同!也就是addAll()

然而,JavaDocs说{{1}}:

,而不是添加其他集
  

public boolean addAll(Collection c)

     

将指定集合中的所有元素添加到此集合中(可选操作)。   如果在操作正在进行时修改指定的集合,则此操作的行为是不确定的。 (T 他暗示如果指定的集合是此集合,则此调用的行为是未定义的,并且此集合是非空的。

我是否理解正确?如果两组相等,java将不支持另一组的添加?如果这是真的,有没有理由以这种方式设计语言?

1 个答案:

答案 0 :(得分:6)

a.equals(b)a == b不同。

javadoc的含义是,如果执行a.addAll(a),则行为未定义。只要它们是不同的实例,a.addAll(b)就没有问题。