contains

 

下面是contains源码

 

contains源码分析

    /*public boolean contains(Object o) {//首先name传入到contains方法中的参数,即o指向name所指向的对象,name对象为上转型对象
            return indexOf(o) >= 0;//调用下面indexOf方法
         }
         public int indexOf(Object o) {//indexOf方法中o指向contains方法中o指向的对象,即indexOf方法o实质指向name对象
            if (o == null) {//o不为null,所以o == null 为false,跳到else部分
                for (int i = 0; i < size; i++)
                    if (elementData[i]==null)
                        return i;
            } else {
                for (int i = 0; i < size; i++)//for循环遍历nameList中每一个元素;其中size为全局变量,省略了this,其实是this.size,nameList调用了contains方法,所以this指代nameList,this.size指nameList中的元素个数;
                    if (o.equals(elementData[i]))//o指向的对象即name,与nameList中遍历出来的每个元素进行对比,对比规则用到equals方法,o.equals(elementData[i]),因为o指向name变量的地址,所以执行时指向的是String类中的equals,

                        return i;//因为if(true),所以返回i,跳转到contains方法,方法体中 return indexOf(o) >= 0,因为indexOf(o) 返回i,而i>=0为true,所以返回true
            }
            return -1;
         }*/

然后是第二种情况

 /*public boolean contains(Object o) {//首先name传入到contains方法中的参数,即o指向name所指向的对象,name对象为上转型对象
            return indexOf(o) >= 0;//调用下面indexOf方法
         }
         public int indexOf(Object o) {//indexOf方法中o指向contains方法中o指向的对象,即indexOf方法o实质指向name对象
            if (o == null) {//o为null,所以o == null 为true,执行if里面的内容
                for (int i = 0; i < size; i++)//for循环遍历nameList中每一个元素;其中size为全局变量,实质为this.size,即nameList的元素个数;
                    if (elementData[i]==null)//o指向的对象与将nameList中遍历出来的每个元素进行对比,对比规则elementData[i]==null,此时elementData[i]中没有null,故==为false,所以不执行此if语句,for语句结束,外面if结束,然后跳到最后的return -1;结束。
                        return i;//结束此方法,返回i到contains方法,方法体中 return indexOf(o) >= 0,而i>=0为true,所以返回true
            } else {
                for (int i = 0; i < size; i++)
                    if (o.equals(elementData[i]))

                           return i;
            }
            return -1;//结束此方法,返回-1到contains方法,方法体中 return indexOf(o) >= 0,而i>=0为false,所以返回false
         }*/
情况三

contains源码分析

  /*public boolean contains(Object o) {//首先test传入到contains方法中的参数,即o指向test所指向的对象,test对象为上转型对象
            return indexOf(o) >= 0;//调用下面indexOf方法
         }
    
         public int indexOf(Object o) {//indexOf方法中o指向contains方法中o指向的对象,即indexOf方法o实质指向test对象
            if (o == null) {//o不为null(test里存有一个地址),所以o == null 为false,不执行if里面的内容,跳到else部分
                for (int i = 0; i < size; i++)
                    if (elementData[i]==null)
                        return i;
            } else {
                for (int i = 0; i < size; i++)//for循环遍历nameList中每一个元素;其中size为全局变量,实质为this.size,即nameList的元素个数;
                    if (o.equals(elementData[i]))//o指向的对象与将nameList中遍历出来的每个元素进行对比,对比规则o.equals(elementData[i]),因为o指向test变量的地址,所以执行时指向的是Test类中的equals,由于①因为Test没有重写Object中euqals方法,所以调用的是继承父类的euqlas;比较的是地址,由于地址不相同,所以为false,不执行此if语句。跳到最后。②如果重写了equals方法,则调用Test类重写后的方法,其中equals参数即为集合中元素(多态)     

                       return i;
            }
            return -1;//返回-1。回到contains方法,-1>=0,为false,所以最后结果为false
         }*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值