ArrayList的contains方法,有以下三种类型:

形式一:

查找的字符不为null时,看如下代码:

import java.util.ArrayList;public class Work {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("Tom");String str = "Tom";System.out.println(list.contains(str));}
}

输出:
true

分析ArrayList的contains源代码:

public boolean contains(Object o) { //o指向str的对象,str为String类的对象,因此str为上转型对象。return indexOf(o) >= 0; //indexOf(o)执行结束后,返回了0,所以此处返回true。
}public int indexOf(Object o) { if (o == null) { //str不等于null,所以为false,进入else。for (int i = 0; i < size; i++)if (elementData[i]==null)return i;} else {for (int i = 0; i < size; i++) //size为this.size,即list.size,该for语句将list遍历进行一一比较。if (o.equals(elementData[i]))  //因为o为上转型对象,所以equals方法运用了多态,此次实际运用的是String类的equals方法,即比较字符串的内容是否相同。return i; //如果满足if,则返回一个大于等于0的值,则由上面代码可知,此处返回0。}return -1;
}
形式二:

查找的字符为null时,看如下代码:

import java.util.ArrayList;public class Work {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("Tom");String str = null;System.out.println(list.contains(str));}
}

输出:
false

分析ArrayList的contains源代码:

public boolean contains(Object o) { //o指向str的对象,str为String类的对象,因此str为上转型对象。return indexOf(o) >= 0; //indexOf(o)执行结束后,返回了-1,所以此处返回false。
}public int indexOf(Object o) { if (o == null) { //str等于null,进入if内容。for (int i = 0; i < size; i++) //对list进行遍历。if (elementData[i]==null) //如果由元素等于null,则返回一个大于等于0的数,此处没有null,所以继续往下走。return i;} else {for (int i = 0; i < size; i++)if (o.equals(elementData[i])) return i; }return -1; //for语句没有进行return,所以在这里返回了-1。
}
形式三:

查找的不是字符类型时,看如下代码:

import java.util.ArrayList;public class Work {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("Tom");Test test = new Test();System.out.println(list.contains(test));}
}

输出:
false

分析ArrayList的contains源代码:

public boolean contains(Object o) { //o指向test的对象,test为Test类的对象,因此test为上转型对象。return indexOf(o) >= 0; //indexOf(o)执行结束后,返回了-1,所以此处返回false。
}public int indexOf(Object o) { if (o == null) { //for (int i = 0; i < size; i++) //test不等于null,所以为false,进入else。if (elementData[i]==null) return i;} else {for (int i = 0; i < size; i++) //size为this.size,即list.size,该for语句将list遍历进行一一比较。if (o.equals(elementData[i])) //因为o为上转型对象,所以equals方法运用了多态,此次实际运用的是Test类的equals方法,即Object类中的equals方法,即比较地址是否相同。此处不可能相同。return i;  //没有数据使if的条件为true,所以该句不执行。}return -1; //上面代码没有执行过return,所以在这里返回了-1。
}

详述ArrayList的contains方法相关推荐

  1. ArrayList中contain方法

    详述ArrayList中contains方法 JDK源码: //contains方法 public boolean contains(Object o) {return indexOf(o) > ...

  2. 详述ArrayList类中的contains方法

    详述ArrayList类中的contains方法 一.contains方法的参数是String类型 import java.util.ArrayList;public class Test {publ ...

  3. ArrayList的subList方法

    李说: ArrayList的subList方法获取到的是ArrayList的一段list,只是其中的一段视图.所以修改subList ,ArrayList同时会修改,因为本来就是同一个东西. jdk文 ...

  4. 如何巧妙的使用ArrayList的Clone方法

    一.ArrayList的Clone方法的源码 返回一个Object对象,所以在使用此方法的时候要强制转换. ArrayList的本质是维护了一个Object的数组,所以克隆也是通过数组的复制实现的,属 ...

  5. java集合的添加方法_深入理解java集合框架之---------Arraylist集合 -----添加方法

    Arraylist集合 -----添加方法 1.add(E e) 向集合中添加元素 /** * 检查数组容量是否够用 * @param minCapacity */ public void ensur ...

  6. ArrayList的使用方法【转载】

    ArrayList的使用方法[转载]   *** Source URL: http://i.yesky.com/bbs/jsp/view.jsp?articleID=889992&forumI ...

  7. java 释放数组_java集合ArrayList中clear方法内存释放分析

    最近在看ArrayList源码的时候看到了ArrayList的clear方法,源码如下: public void clear() { modCount++; // clear to let GC do ...

  8. java基础 ArrayList集合基本方法演示

    java基础 ArrayList集合基本方法演示 import java.util.ArrayList; import java.util.Iterator;public class ArrayLis ...

  9. 慎用ArrayList的contains方法,使用HashSet的contains方法代替

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 在启动一 ...

最新文章

  1. mysql update w3c_PHP MySQL Update
  2. 习题:codevs 2822 爱在心中 解题报告
  3. 设置html初始值0,数组怎么初始化?
  4. [How TO]-如何使用Sphinx编写漂亮的文档
  5. 如何让cloudflare缓存html,CloudFlareCDN页面规则缓存设置教程
  6. Django实现发邮件
  7. java用对话框输出计算结果_Java怎么实现输入一个string表达式然后输出计算的结果...
  8. setuptools find_packages
  9. 阿里云产品汇总及解释
  10. Python:PyCharm提示“Python version 2.7 does not support a ‘F‘ prefix”
  11. -bash : ** : command not found的问题解决(图文详解)
  12. Q140:PBRT-V3,各种渲染算法(Integrator,积分器)汇总
  13. 移动硬盘“脱机”(签名冲突)的硬盘如何正常使用
  14. 计算机函数公式发生额总计,Excel使用SUMIF函数统计各部门的奖金总额
  15. 日紫白飞星算法_九宫紫白飞星计算法
  16. vue 、前端rsa加密遇到的问题,message too long for RSA
  17. 爬虫练习--豆瓣英美剧爬虫
  18. word 目录里面添加分节符下一页出现空白页的解决方法
  19. HTML+CSS实现网页分页页码
  20. 操作系统生产者消费者问题实验报告

热门文章

  1. mac mysql 服务启动不了_macbook:MySql 无法启动解决方法
  2. “普通人”鲁迅:31岁那年,我终于当上了公务员
  3. Vue - 图像加载时渐隐淡入效果(img)
  4. Python小游戏(五)吃豆人小游戏
  5. 如何用UE4制作2D游戏文档(三)——角色篇
  6. 解决X210开发板被刷成砖的问题
  7. css实现车轨动画转弯,css3实现沿椭圆轨迹旋转动画
  8. 【电子学会】2021年12月图形化四级 -- 聪明的小猫
  9. 韩国又一感人MV《我知道的》
  10. 桌面上的IE没有了,怎么办?