Mun*_*uno 2 java collections set
在一个方法中,我打两个电话.第一个调用构造并从另一个方法返回一个hashset.第二个调用将此新构造的集合添加到现有集合,作为参数传递给此方法.
public static void someMethod(java.util.HashSet<Coordinate> invalidPositions)
{
java.util.HashSet<Coordinate> newSet = SomeClass.getInvalidPositions(x, y);
invalidPositions.addAll(newSet);
}
Run Code Online (Sandbox Code Playgroud)
通常,传入的集合(预先存在的集合)将添加另一个集合,其内容与其自身相同!那是,setOne.equals(setTwo) == true
然而,JavaDocs没有添加其他集合,而是说addAll():
public boolean addAll(Collection c)
将指定集合中的所有元素添加到此集合中(可选操作).如果在操作正在进行时修改了指定的集合,则此操作的行为是不确定的.(这意味着如果指定的集合是此集合,则此调用的行为是未定义的,并且此集合是非空的.)
我理解正确吗?如果两组相等,java将不支持另一组的添加?如果这是真的,有没有理由以这种方式设计语言?
a.equals(b)不同于a == b.
javadoc的含义是,如果你这样做,行为是不确定的a.addAll(a).a.addAll(b)只要它们是不同的实例,就没有问题.