java arraylist contains_详述ArrayList类的contains方法

源码:

public boolean contains(Object o) {

return indexOf(o) >= 0;

}

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;

}

String类型:

ArrayList names =new ArrayList();

names.add("Tom");//向ArrayList集合中添加元素

System.out.println(names.contains("Tom"));//判断集合中是否包含Tom元素,若有则为true,否则false

分析:

contains方法执行时,会调用indexOf()方法,在indexOf方法中会判断传入的String类的上转型对象o是否为空,如果为空,返回下表值;若o非空,则进行遍历元素,contains方法实质上调用的是String对象中的equals 方法。

包装类:

ArrayList ages = new ArrayList();

ages.add(12);

System.out.println(ages.contains(new Integer(12)));

分析:

contains方法执行时,会调用indexOf()方法,进行初步判断,o非空则会调用包装类Integer中的equals方法。

自定义类:

ArrayList students = new ArrayList();

students.add(new Student("111"));

System.out.println(students.contains(new Student("111")));

public class Student {

private String id;

public Student(String id) {

this.id = id;

}

@Override

public boolean equals(Object obj) {

Student s=(Student) obj;

return this.id.equals(s.id);

}

}

分析:

重写前:Student类中无equals方法,因此调用的是Object中equals方法,比较两者的地址是否相同,而此例中地址不同,所以结果为false。

重写后:此时在执行equals方法时会调用重写的equals方法,即比较内容是否相同,所以输出结果为true。

ArrayList students = new ArrayList();

students.add(new String("111"));

System.out.println(students.contains(new Student("111")));

此时String类无法转为Student类,会报错,则需要使用instanceof修改重写的equals方法:

@Override

public boolean equals(Object obj) {

if(obj instanceof Student) {

Student s = (Student)obj;

return this.id.equals(s.id);

}

return false;

}

obj是Student类才进行下转型比较,否则返回false.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值