美文网首页
ArrayList中contains()的返回值

ArrayList中contains()的返回值

作者: sgy_j | 来源:发表于2020-03-06 17:38 被阅读0次

我们先看下contains()的源码-JDK1.8

    public boolean contains(Object o) {
        return this.indexOf(o) >= 0;
    }

    public int indexOf(Object o) {
        return this.indexOfRange(o, 0, this.size);
    }

    int indexOfRange(Object o, int start, int end) {
        Object[] es = this.elementData;
        int i;
        if (o == null) {
            for(i = start; i < end; ++i) {
                if (es[i] == null) {
                    return i;
                }
            }
        } else {
            for(i = start; i < end; ++i) {
                if (o.equals(es[i])) {
                    return i;
                }
            }
        }

        return -1;
    }

从源码可知,list.contains(obj)的返回值取决于obj对象的equals()方法。
若obj未重写Object的equals()方法,则list.contains(obj)是在list中查找是否有和obj相同引用的对象。若有,则返回true;否则,返回false。
否则,则在list中查找是否有和obj等价的对象。若有,则返回true;否则,则返回false。

现有一个Person类,未重写equals()方法

public class Person {
    private int id;
    private String name;
    public Person(int id, String name) {
        this.id = id;
        this.name = name;
    }
}
public class Test {
    public static void main(String[] args) {
        ArrayList<Person> list2 = new ArrayList();
        Person person1 = new Person(1, "Lisa");
        Person person2 = new Person(1, "Lisa");
        list2.add(person1);
        System.out.println(list2.contains(person2));
    }
}  
false

String重写了Object的equals()方法

  public static void main(String[] args) {
        ArrayList<String> list = new ArrayList();
        String str1 = new String("ddd");
        String str2 = new String("ddd");
        list.add(str1);
        System.out.println(list.contains(str2));
    }
true

相关文章

网友评论

      本文标题:ArrayList中contains()的返回值

      本文链接:https://www.haomeiwen.com/subject/lhdwrhtx.html