原文连接:https://blog.csdn.net/u012310056/article/details/75432871
Collection源码
contains()-以及containsAll()
//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;}
怎么样?源码非常简单其实就是一个迭代(不会迭代自行百度),并不比你自己写一个迭代的效率会快。要说快,可能只是人家已经把方法给你写好了,你不需要再去写这个循环了而已。
有没有人会提出疑问,说if else中相等的判断,it.next()==null和o.equals(it.next()) 为什么一个用的==,一个用的equals。可以参考我另一篇文章。你是否真的会用==和equals
containsAll()
直接看源码:
public boolean containsAll(Collection<?> c) {for (Object e : c)if (!contains(e))return false;return true;}
就是循环,只要有一个不包含在collection就直接返回fasle,否则就返回true。话说我们还是不要按照源码这么写,if后面加上{}为好,这么写不是不对,给人感觉不太规范。
