关于ArrayList类中的indexOf方法的使用和对它的阐述

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了吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值