indexOf方法的功能
怎么去使用它
注意事项
public int indexOf(Object o)
一,先给大家介绍一下它的功能:
1,传递一个元素给它,如果此列表不包含这个元素,则返回-1。
2,如果包含这个元素:分两种情况。若为null,找到它对应的索引返回。不为null,同样找到对应索引返回。
二,知道功能那么怎么使用呢?测试代码如下:
indexOf方法的功能
怎么去使用它
indexOf的要点
1,关于null
2,关于equals
public int indexOf(Object o)
一,先给大家介绍一下它的功能:
1,传递一个元素给它,如果此列表不包含这个元素,则返回-1。
2,如果包含这个元素:分两种情况。若为null,找到它对应的索引返回。不为null,同样找到对应索引返回。
二,知道功能那么怎么使用呢?测试代码如下:
import java.util.ArrayList;
import java.util.List;
public class TestArraylist3 { public static void main(String[] args) {
List list=new ArrayList();
list.add("123");
list.add("asd");
list.add(345);
list.add(null);
list.add("null");
System.out.println(list.size());
System.out.println(list.indexOf("null"));
}
}
测试结果 5 4
三,indexOf的要点
大家看到我的代码有没有疑惑呢?为什么我要测试null.这就不得不说indexOf方法设计的精妙之处了。下面先分别介绍一下null和equals:
null
1,**null是java中的关键字,因此,它不能写成NULL,Null,只能是null。
2, null是所有引用类型的默认值,如果没有让一个引用指向一个实际存在的对象,它的默认值就是null。null本质上是一个值,这跟int的默认值是0,boolean的默认值是false一样。
所以因为它的存在空指针异常就出现了。
equals
这里只摘抄部分关于它的要点:
equals方法在***非空对象***引用上实现等价关系:
对于任何非空的参考值x , x.equals(null)应该返回false
此处可以看出null放在equals的后面时,是不会报错的,那么前面呢?
可以看出放在前面他会报空指针异常。
现在把null改为字符串就不会了。
总结一下:就是null放在前面和equals连用时是会报异常的。
下面请看indexOf的源代码:
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;
}
要点1,如果不知道null和equals的用法,我会觉得完全没必要判断传递进来的元素是不是null,即可以删除这段代码:
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
}
此时相同的话返回对应的索引,不同就返回-1.但是却忽略了null和equals的关系。
要点二:如果没有上面那段代码,而当传递的对象恰好是null时,它会执行
if (o.equals(elementData[i]))
此时null放在equals前面,就会报空指针异常。所以不得不说前面那段代码设计得非常好,这个思路值得我们学习。
想必看到这里大家应该都会用indexOf了吧。