原文连接:https://blog.csdn.net/u012310056/article/details/75432871

Collection源码

contains()-以及containsAll()

  1. //contains()源码
  2. public boolean contains(Object o) {
  3. Iterator<E> it = iterator();
  4. if (o==null) {
  5. while (it.hasNext())
  6. if (it.next()==null)
  7. return true;
  8. } else {
  9. while (it.hasNext())
  10. if (o.equals(it.next()))
  11. return true;
  12. }
  13. return false;
  14. }

怎么样?源码非常简单其实就是一个迭代(不会迭代自行百度),并不比你自己写一个迭代的效率会快。要说快,可能只是人家已经把方法给你写好了,你不需要再去写这个循环了而已。

有没有人会提出疑问,说if else中相等的判断,it.next()==null和o.equals(it.next()) 为什么一个用的==,一个用的equals。可以参考我另一篇文章。你是否真的会用==和equals

containsAll()

直接看源码:

  1. public boolean containsAll(Collection<?> c) {
  2. for (Object e : c)
  3. if (!contains(e))
  4. return false;
  5. return true;
  6. }

就是循环,只要有一个不包含在collection就直接返回fasle,否则就返回true。话说我们还是不要按照源码这么写,if后面加上{}为好,这么写不是不对,给人感觉不太规范。