ArrayList中的contains方法用于判断在ArrayList中是否包含目标元素。
(推荐教程:java入门教程)
原理:
调用indexOf(Object o)方法
复制publicboolean contains(Object o){return indexOf(o)>=0;}
indexOf(Object o)方法中调用传入Object对象的equals方法进行比较
复制publicint indexOf(Object o){// 传入的Object是null, 则在集合中寻找为null的元素if(o ==null){for(int i =0; i < size; i )if(elementData[i]==null)return i;}else{// 如果不为null, 调用equals方法比较for(int i =0; i < size; i )if(o.equals(elementData[i]))return i;}// 不满足条件, 返回-1return-1;}
用法:
既然已经清楚了原理, 接下来要做的就是看一下常用类的equals方法
(学习视频推荐:java课程)
String类
复制publicboolean equals(Object anObject){// 如果两个对象内存地址相同, 返回trueif(this== anObject){returntrue;}// 判断传入Object是String的情况if(anObject instanceofString){String anotherString =(String)anObject;int n = value.length;if(n == anotherString.value.length){char v1[]= value;char v2[]= anotherString.value;int i =0;// 比较String转化的char[]中的每一个char元素// 如果有一个不想等,则返回falsewhile(n--!=0){if(v1[i]!= v2[i])returnfalse;
i ;}returntrue;}}returnfalse;}
所以说, 如果ArrayList集合中的元素类型是String, 直接使用contains方法是没问题的
Integer类
其他包装类型同它基本相同,都是比较的值, 因此也可以直接使用contains方法
复制publicboolean equals(Object obj){if(obj instanceofInteger){return value ==((Integer)obj).intValue();}returnfalse;}
其他引用类型
相信不说大家也知道了, 使用其他引用类型需要用到contains方法时,要重写equals方法呦!