2 baidu 37278726 baidu_37278726 于 2017.01.07 15:55 提问

java中的arraylist中的contains源码 5C

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;

这是ArrayList中 contains 源码 我想问下 那个 if(o==null)是啥意思

在实际操作是干啥的
contains(O)传值时O如果是null的话会报错的

3个回答

qq_36440096
qq_36440096   2017.01.07 16:11

String str = null;
String str1= "a";
System.out.println(str1.contains(str));

判断字符串中是否有"null";


String str;
String str1= "a";
System.out.println(str1.contains(str));

编译不会通过.

源码是上边的那种意思

u010528826
u010528826   2017.01.07 16:14

这段代码很好理解啊。
如果o为null,那么就去找elementData[] 是否有为null的对象,有则返回下标没有则返回-1。
如果o不为null,就通过equals去比较elementData[] 中是否有与o相同的对象,有则返回下标没有则返回-1。
这里判断 o==null 主要就用来确定是否要使用 o.equals(),防止出现NPE。
因为ArrayList 是可以放入null的,所以不能 elementData[i].equals(o) 。

另外对于你说的 “contains(O)传值时O如果是null的话会报错的”不知是什么错?我试了下没得问题。
图片说明

m0_37278110
m0_37278110   2017.01.07 16:43

参数:
o - 要测试列表中是否存在的元素
返回:
如果列表包含指定的元素,则返回 true
抛出:
ClassCastException -
如果指定元素的类型和此列表不兼容(可选)
NullPointerException

  • 如果指定的元素为 null,并且此列表不允许 null 元素(可选)

这是API的解释
简单点就是:判断集合中是否包含了括号中的元素,如果有就返回true,没有返回false

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!