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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
java中ArrayList的contains(obj)和indexOf(obj)方法的调用顺序
java中ArrayList的contains(obj)和indexOf(obj)方法的调用顺序
ArrayList和HashSet的Contains()方法
首先来看一道笔试题: import java.util.ArrayList; import java.util.HashSet; public class Foo { int value; Foo(int value) {
ArrayList中 contains比较内容
博主java基础不好,今天用到ArrayList的contains的方法的时候,我发现尽管我的两个对象的实例内容相同(当然两个实例的ID号并不相同),但是contains也不能判true。
ArrayList的contains方法,底层调用了equals方法
题目: /* 思路 1对人描述,将数据封装进人对象 2定义容器,将人存入 3取出 */ import java.util.*; class Person { private String name; private int age; Person(String name,int age) { this
[Java基础]ArrayList的contains方法,你用对了吗?
最近在代码Review中发现,有同学错用了数组的contains方法。 示例如下: public class ListItem { private int id; private String name; public ListItem(int id, String name) { this.id = id; this.name =...
java 慎用ArrayList的contains方法,使用HashSet的contains方法代替
在启动一个应用的时候,发现其中有一处数据加载要数分钟,刚开始以为是需要load的数据比较多的缘故,查了一下数据库有6条左右,但是单独写了一个数据读取的方法,将这6万多条全部读过来,却只需要不到10秒钟,就觉得这里面肯定有问题,于是仔细看其中的逻辑,其中有一段数据去重的逻辑,就是记录中存在某几个字段相同的,就认为是重复数据,就需要将重复数据给过滤掉。这里就用到了一个List来存放这几个字段所组成的主键
ArrayList的contains方法的效率果然不高
之前做的一个项目,数据库抽出了40多万条数据,然后从csv文件抽出了大概也是40多万条数据,进行对比分析  之前代码如下 List keys = new ArrayList(); int isize = msTaiyousr.size(); for (int i=0;i<isize;i++) { Map msyaiyousr = msTaiyousr.get(i);
ArrayList 中 contains remove 判断元素相同 底层调用了 equals方法
我们有时候需要判断arraylist容器中是否已经存了某个元素,那么调用contains(object)方法就可以了,他的返回值是boolean类型,若有已经存在某元素则返回true,如果不存在则返回false。 比如 package info.dyndns.oszc; import java.util.*; public class Utils { public static v
java ArrayList的contains方法问题
arrayList的contains方法比较是否包含元素的时候,调用的是 对象的equals方法,也就是说如果对象没有重写equals方法,那么其实比较的事堆中的地址是否相等了。 下面是 contains方法的源码。 public boolean contains(Object o) {        return indexOf(o) >= 0;        }  
Java中list集合ArrayList 中contains包含的使用
Java中list集合ArrayList 中contains包含的使用