[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方法的主要内容,如果未能解决你的问题,请参考以下文章
HashSet的contains()和ArrayList的contains()方法哪个更快一些?
Java通过ArrayList的contains(Object o)方法实现去重字符串中的字符