的addAll()的类AbstractCollection是这样实现的:
public boolean addAll(Collection<? extends E> c) {
boolean modified = false;
for (E e : c) if (add(e)) modified = true;
return modified;
}
Run Code Online (Sandbox Code Playgroud)
因此,如果参数中的c是3个元素的集合,则可能是这些元素中的前2个被添加的情况,但是由于某种原因我不能想到第3个元素.
在这种情况下,addAll()操作 - 不会将所有这3个元素添加到基础Collection中,并且addAll()将返回false.但是,前两个元素是存在的 - 开发人员会期望它们不应该是(?)
HashSet在其构造函数中使用此addAll(),其中包含Collection类型的单个参数.
因此,在他寻找整个集合时,开发人员最终可能会得到一个包含其集合的一部分的HashSet实例.这没有任何警告就会发生.
该方法involved-- 把()的HashMap中,并加入()的HashSet的似乎简单enough--似乎`吨任何事情都有可能这些operations--但仍时出错.
我错过了什么吗?
| 归档时间: |
|
| 查看次数: |
5280 次 |
| 最近记录: |