zoukankan      html  css  js  c++  java
  • [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
  • 相关阅读:
    Python的优点和缺点
    如何在sed中使用变量方法及其简单
    shell脚本练习,创建数据文件注册用户并将用户信息存入文件内,用于模拟登录时使用
    shell脚本常用参数与格式
    运维方向和运维需要掌握的基本面
    linux系统awk命令精解
    数组去重方式
    原生js封装cookie获取、设置及删除
    sublime 浏览器快捷键设置
    background-image实现border效果及多图png如何实现background-size为原图一半
  • 原文地址:https://www.cnblogs.com/chiweiming/p/10700761.html
Copyright © 2011-2022 走看看