使用removeAll所引出的问题
来源:互联网 发布:封闭式基金网络购买 编辑:程序博客网 时间:2024/05/24 06:35
这几天做项目的时候发现使用removeAll的时候出现的一个问题做一下探究
例如:list<自定义的类> a=new ArrayList<自定义的类>(); list<自定义的类> b=new ArrayList<E=自定义的类>(); 集合b是集合a 的子集,并且集合b的size()小于集合a的size();
理论上 a.removeAll(b) 之后 a的size()应该大于0,但是结果却是0,结果真是让我大失所望啊。究竟是为什么呢?我去看了一下Java的源代码
remove的源代码
public boolean remove(Object o) { Iterator<E> it = iterator(); if (o==null) { while (it.hasNext()) { if (it.next()==null) { it.remove(); return true; } } } else { while (it.hasNext()) { if (o.equals(it.next())) { it.remove(); return true; } } } return false; }</span>再看removeall的源代码
public boolean removeAll(Collection<?> c) { boolean modified = false; Iterator<?> it = iterator(); while (it.hasNext()) { if (c.contains(it.next())) { it.remove(); modified = true; } } return modified; }</span>
我们发现removeall使用的还是remove,而remove使用了,equals,而恰巧的是我自定义的类中重写了equals。。。。找到原因了 既然知道了这个原因,我们在探究一下究竟还有哪些方法也受equals 方法的影响呢?
contains方法有木有?
public boolean contains(Object o) { Iterator<E> it = iterator(); if (o==null) { while (it.hasNext()) if (it.next()==null) return true; } else { while (it.hasNext()) if (o.equals(it.next())) return true; } return false; }</span>其实说道equals方法就会想到 hashcode,就会想到“==” ,有兴趣的童鞋可以看看我的其他的博文 有详细的介绍哦
0 0
- 使用removeAll所引出的问题
- spring 4.2.4 与 Jackson 2.7 所引出的问题
- #引出的各种问题
- lambda引出的问题
- Android中软键盘的引出的问题,所做的小Demo
- 由web项目中上传图片所引出的路径问题
- memcpy的使用以及其引出的‘\0’显示问题
- static 销毁之后继续使用引出的问题
- 使用Tokyo Cabinet数据库,引出的编译问题。
- 指针初始化引出的问题
- z-order引出的问题
- 二分查找引出的问题
- z-order引出的问题
- z-order引出的问题
- ORA-12519引出的问题
- PhotoCamera引出的一个问题
- 关于_ATL_MIN_CRT引出的问题
- android context引出的问题
- 2 yii2.0 如何创建一个应用
- C++ 用new 动态创建多维数组
- 职员有薪水了
- 图像获取与单目定标
- nyoj 38 布线问题(最小生成树 kruskal算法)
- 使用removeAll所引出的问题
- CATextLayer的学习
- 第十一周 项目2-职员有薪水了(1)
- gdb for Android4.4
- Code Review最佳实践
- (2)第一次连接树莓派 - 树莓派,一根网线,笔记本电脑,只有这三个也能玩pi(转载)
- 第十一周 项目二 职员有薪水了
- XRAM 读写
- 第十一周阅读程序4:基类、派生类中构造函数、析构函数执行过程