//ArrayList contains方法
ArrayList<String> list = new ArrayList<String>();
list.add("Jim");
Object object = "Jim";//上转型对象
System.out.println(list.contains(object));
-----------------------------------------------------------------------------------------
contains:
public boolean contains(Object o) {
return indexOf(o) >= 0;//indexof 返回的值大于或等于0即代表在数组中找到了对应元素的位置,所以返回true;
}
indexof:
public int indexOf(Object o) {
if (o == null) { //o为"Jim"不为null,不执行该if;
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)//此处的size为成员变量,代表集合中的元素个数,此时为1;
if (o.equals(elementData[i]))//由于o为String类上转型Object对象,出现多态(执行String类中重写的equal方法),elementData[i]为数组中已存在的数组元素;
return i; //找到后返回在数组中的位置i;
}
return -1;
}
equals:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
ArrayList<Object> list = new ArrayList<Object>();
list.add(new Student("110"));
Object object = new Student("110");//上转型对象
System.out.println(list.contains(object));
contains:
public boolean contains(Object o) {
return indexOf(o) >= 0;//indexof 返回的值大于或等于0即代表在数组中找到了对应元素的位置,所以返回true;
}
indexof:
public int indexOf(Object o) {
if (o == null) { //o为"Jim"不为null,不执行该if;
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)//此处的size为成员变量,代表集合中的元素个数,此时为1;
if (o.equals(elementData[i]))//由于o为Student类上转型Object对象,(但是Student类中没有重写equals方法,所以调用的还是Object中的equals方法,比较地址,因为是new Student(),所以地址不同,所以返回false),elementData[i]为数组中已存在的数组元素;
return i; //找到后返回在数组中的位置i;
}
return -1;
}
-----------------------------------------------------------------------------------------
在Student类中重写equals方法:
package com.jd.vo;
public class Student {
private String id;
public Student(String id) {
this.id = id;
}
@Override
public boolean equals(Object obj) {//obj集合中元素
if (obj instanceof Student) {//在这里加一个if判断是为了排除不属于Student类的情况;如:
list.add(new Date("110")),就会出现异常,因为Data类不属于Student类;
Student student = (Student) obj;
return this.id.equals(student.id);//thiscontains方法参数;
}
return false;
}
}