【发布时间】:2015-09-12 02:21:48
【问题描述】:
在一个方法中,我进行了两次调用。第一次调用从另一个方法构造并返回一个哈希集。第二次调用将这个新构造的集合添加到现有集合中,作为参数传入此方法。
public static void someMethod(java.util.HashSet<Coordinate> invalidPositions)
{
java.util.HashSet<Coordinate> newSet = SomeClass.getInvalidPositions(x, y);
invalidPositions.addAll(newSet);
}
很多时候,传入的集合,已经存在的集合,会添加另一个内容与自身相同的集合!即setOne.equals(setTwo) == true
然而,JavaDocs 没有添加另一组,而是使用addAll():
public boolean addAll(Collection c)
将指定集合中的所有元素添加到此集合(可选操作)。 如果在操作正在进行时修改了指定的集合,则此操作的行为是未定义的。 (这意味着如果指定的集合是这个集合,并且这个集合是非空的,那么这个调用的行为是未定义的。)
我是否理解正确?如果两个集合相等,java会不支持一个相加吗?如果这是真的,是否有任何理由以这种方式设计语言?
【问题讨论】:
-
甲可以踩乙的肩膀爬得更高。但是A不能踩A的肩膀去爬得更高。假设 B 是静止的;该操作不会改变 B 的状态。
标签: java collections set