addAll()是否返回false?

Ken*_*man 5 java collections

同时查看CollectionUtils addAll方法的源代码.我注意到它使用|=符号

public static <T> boolean addAll(Collection<? super T> c, T... elements) {
 boolean result = false;
 for (T element : elements)
    result |= c.add(element);

 return result;
}
Run Code Online (Sandbox Code Playgroud)

从我的理解|=是一个按位或运算符,只是一个简写result = result|c.add(element),所以例如:

System.out.println(false|true); //true
System.out.println(false|false); //false
System.out.println(true|false); //true
System.out.println(true|true); //true
Run Code Online (Sandbox Code Playgroud)

这意味着如果成功添加任何项目,它将返回true.现在我一直想知道会有一个实例,它会返回false吗?如果不是为什么它有回报?

Era*_*ran 6

如果要添加的所有元素都已在Collection中(在调用addAll之前),并且Collection不允许重复,则它将返回false,因为所有单个add方法调用都将返回false.这对于诸如此类的集合来说是正确的Set.

对于其他集合,add始终返回true,因此addAll将返回true,除非您使用要添加的空元素列表调用它.