在方法中,我打两个电话。第一个调用构造并从另一个方法返回一个hashset。第二个调用将这个新构造的集添加到现有集中,作为参数传入此方法。
setOne.equals(setTwo) == true
通常,传入的集合(预先存在的集合)将添加另一个集合,其内容与其自身相同!也就是addAll()
然而,JavaDocs说{{1}}:
,而不是添加其他集public boolean addAll(Collection c)
将指定集合中的所有元素添加到此集合中(可选操作)。 如果在操作正在进行时修改指定的集合,则此操作的行为是不确定的。 (T 他暗示如果指定的集合是此集合,则此调用的行为是未定义的,并且此集合是非空的。)
我是否理解正确?如果两组相等,java将不支持另一组的添加?如果这是真的,有没有理由以这种方式设计语言?
答案 0 :(得分:6)
a.equals(b)
与a == b
不同。
javadoc的含义是,如果执行a.addAll(a)
,则行为未定义。只要它们是不同的实例,a.addAll(b)
就没有问题。