Java ArrayList常用方法

Java ArrayList contains()方法  用于判断集合中是否存在某个元素。

语法

语法如下:
public boolean contains(Object obj) 

参数

  • obj:  要检查的对象元素。

返回值

布尔类型,存在返回true,不存在返回false。

注意

判断是否存在的原理是使用equals()方法,如有必要需要重写对象的equals()方法

内部实现

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;
} 

我们看到,相等的判断使用的是equals()方法。这一点非常重要,需要理解,请看下面的代码帮助理解。

equals比较的是对象的地址(对于String类型,equals比较的是String的内容)。

例子1

先看一个简单的例子,对于字符串的比较,只比较内容。
import java.util.ArrayList;
public class ArrayListExample1 {
    public static void main(String[] args) {
         //字符串类型
        ArrayList<String> arrayList= new ArrayList<String>();
        arrayList.add("a");
        arrayList.add("b");
        arrayList.add("c");  if (arrayList.contains("b")) {  System.out.println("存在元素b");  } 
        
    }
}  
输出:
存在元素b

例子2

看一个是否存在对象的例子,没有重写equals()方法。

import java.util.ArrayList;

public class Test  {

    public static void main(String args[]) {
        //没有重写equals例子
        ArrayList<Person> arrayList= new ArrayList<Person>();
        Person person_1 = new Person(1,"张三", "湖北");
        Person person_2 = new Person(2,"李四", "湖南");
        arrayList.add(person_1);
        arrayList.add(person_2);
        Person person_check = new Person(2,"李四", "湖南");

        System.out.println(arrayList.contains(person_check));//返回false

    }

}

class Person {
    private Integer id;
    private String name;
    private String address;

    public Person(Integer id, String name, String address) {
        this.id = id;
        this.name = name;
        this.address = address;
    }

} 
输出:
false

 上面的例子中,虽然person_2 和person_check有相同的id,name,address,但是它们的地址不同,所以不包含,返回false。

现在,我们重写equals方法再看。参考Java如何重写equals和hashCode方法

import java.util.ArrayList;

public class Test  {

    public static void main(String args[]) {
        //没有重写equals例子
        ArrayList<Person> arrayList= new ArrayList<Person>();
        Person person_1 = new Person(1,"张三", "湖北");
        Person person_2 = new Person(2,"李四", "湖南");
        arrayList.add(person_1);
        arrayList.add(person_2);
        Person person_check = new Person(2,"李四", "湖南");

        System.out.println(arrayList.contains(person_check));//返回true

    }

}

class Person {
    private Integer id;
    private String name;
    private String address;

    public Person(Integer id, String name, String address) {
        this.id = id;
        this.name = name;
        this.address = address;
    }

    @Override
    public boolean equals(Object o) {
        if(o == this)
            return true;
        if(!(o instanceof Person))
            return false;
        if (o instanceof Person) {
            Person person = (Person)o;
            return person.id.equals(id)
                    && person.name.equals(name)
                    && person.address.equals(address)
                    ;
        }
        return false;
    }

}
输出:
true