遍历集合,寻找集合中符合要求的元素。集合类ArrayList中提供了官方的比较方法,
boolean contains(Object o); 和 int indexOf(Object o);
其两种方法都来源于继承的超级接口 List,而 List 又继承自集合根类接口 Collection,在 ArrayList 类中具体实现。
两种方法实际作用一样,只是返回值不同。使用方法:
List list = new ArrayList();
ArrayList al = new ArrayList();
list.contains("aa");
list.indexOf("aa");
al.contains("aa");
al.indexOf("aa");
boolean contains(Object o);
public boolean contains(Object o) {
return indexOf(o) >= 0;
}
可以看到上述contains 代码,实际上是调用了 indexOf 方法,如果返回值大于0,则返回true,说明集合中含有该元素,如果返回 值小于0,则返回 false,说明集合中不含有该元素。
int indexOf(Object o);//具体实现方法
public int indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (o.equals(elementData[i]))
return i;
}
return -1;
}
可以看到,indexOf 有对元素进行null 值和非null的两种判断,然后进行 == 与 equals方法的判断,如果存在返回该元素在集合 中的索引,否则返回-1,而contains 方法再根据其判断。
此方法存在于API中,可以直接使用,也可自己书写。
PS:对象元素的判断,如果集合中存储的是对象元素,要使用equals方法进行判断时,需要在对象的定义类中,对 equals 方 法进行重写,自定义判断标准。由于 equals 是根类Object的方法,所以对其重写之后,集合判断传入对象时,由于JAVA中多 态的缘故,父类引用会调用子类方法,所使用的就是对象重写过的equals方法进行判断。
PS的PS:简而言之,对象间的相等判断,需要自行在类中重写equals方法,或者自定义方法来判断。