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后面加上{}为好,这么写不是不对,给人感觉不太规范。