[Java]ArrayList集合的contains方法

Posted 豪杰冢化尘烟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Java]ArrayList集合的contains方法相关的知识,希望对你有一定的参考价值。

  用到集合ArrayList时经常会用到里面自带的方法boolean contains(Object o);此方法用于判断集合里面是否包含元素o,现在讨论下在Object类型为类类型的时候的情况;

class Point1{    //代表细胞
    
    public int x;    //
    public int y;    //
    
    public Point1(int x,int y){
        this.x=x;
        this.y=y;
    }

}

public class Test{
    
    public static void main(String args[]){

        List<Point1> list=new ArrayList<Point1>();
        Point1 a=new Point1(1,2);
        Point1 b=new Point1(1,2);
        list.add(a);
        if(list.contains(b)){
            System.out.println("1");
        }

    }
    
}

  无输出,因为对象a和b是拥有不同的引用!

  看ArrayList的contains的源码

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

  在语句 o.equals(elementData[i]) 中,调用了equals方法,众所周知,此方法比较的是引用,所以可以Override此方法以达到我们所需要的效果。

class Point1{    //代表细胞
    
    public int x;    //
    public int y;    //
    
    public Point1(int x,int y){
        this.x=x;
        this.y=y;
    }
    
    @Override
    public boolean equals(Object obj) {
        Point1 newPoint=(Point1)obj;
        return this.x==newPoint.x && this.y==newPoint.y;
    }
}
class Point1{    //代表细胞
    
    public int x;    //
    public int y;    //
    
    public Point1(int x,int y){
        this.x=x;
        this.y=y;
    }
    
    @Override
    public boolean equals(Object obj) {
        Point1 newPoint=(Point1)obj;
        return this.x==newPoint.x && this.y==newPoint.y;
    }
}

public class Test{
    
    public static void main(String args[]){

        List<Point1> list=new ArrayList<Point1>();
        Point1 a=new Point1(1,2);
        Point1 b=new Point1(1,2);
        list.add(a);
        if(list.contains(b)){
            System.out.println("1");
        }

    }
    
}
1

 

以上是关于[Java]ArrayList集合的contains方法的主要内容,如果未能解决你的问题,请参考以下文章

java之判断集合中的元素是否重复

HashSet的contains()和ArrayList的contains()方法哪个更快一些?

Java通过ArrayList的contains(Object o)方法实现去重字符串中的字符

2020/7/15 java Map接口 静态导入 可变参数 collections集合工具类

Java-ArrayList源码分析

Java ArrayList:当arraylist包含给定对象时,contains()方法返回false