为何AbstractCollection的removeAll方法不像AbstractSet的removeAll方法那样,先比较size,选择size比较小的进行iterate,iterate的时候进行删除。
解决方案 »
- 菜鸟求解面向对象中封装为什么会运行出这个结果。
- java byte转16进制
- 新手急求答案
- openfire做一个插件
- 【MLDN J2SE部分--五子棋项目)】
- Java连接SQLServer数据库,其中某表有两个字段是datetime类型的,请问如果在java的类中插入一条记录时时,datetiem型的字段该怎么处理?
- 如何用链表表示一副扑克牌,我写的一段有明显错误,但我不会改,谢谢。
- SUN为什么规定public class 的名字与文件名一致?
- 如何 import 自己的类? 我试着导入,出错!
- 请教大牛,app有个聊天的功能,设计的是按照轮询的方式来拉消息,拉消息的时候每次从db里查询sql,性能特别差,如何改善?
- 一段代码,问几个菜鸟问题,已经标注出来了。
- 如何在JTree中将"我的电脑"设置成根目录
源码public boolean removeAll(Collection<?> c) {
boolean modified = false; if (size() > c.size()) {
for (Iterator<?> i = c.iterator(); i.hasNext(); )
modified |= remove(i.next());
} else {
for (Iterator<?> i = iterator(); i.hasNext(); ) {
if (c.contains(i.next())) {
i.remove();
modified = true;
}
}
}
return modified;
}public boolean removeAll(Collection<?> c) {
boolean modified = false;
Iterator<?> e = iterator();
while (e.hasNext()) {
if (c.contains(e.next())) {
e.remove();
modified = true;
}
}
return modified;
}
因为是用contains来判断是否重复的,如果Collection中A.removeAll(B)的时候使用B做遍历,那么就需要a.contain(B中的某个元素),如果包含那么A就要调用A.remove(B中的元素)。如果A中有多个元素和B中的这个元素相同,而remove()一次只删除一个,就很难判断需要进行多少次remove(),可能需要写while(A.contain(B中的元素))A.remove(B中的元素)了。
我认为,1F是对的。Set没有重复元素,遍历少的即可。而Collection可能会有重复,因此必须遍历自己。