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
  • 相关阅读:
    Call KernelIoControl in user space in WINCE6.0
    HOW TO:手工删除OCS在AD中的池和其他属性
    关于新版Windows Server 2003 Administration Tools Pack
    关于SQL2008更新一则
    微软发布3款SQL INJECTION攻击检测工具
    HyperV RTM!
    OCS 2007 聊天记录查看工具 OCSMessage
    CoreConfigurator 图形化的 Server Core 配置管理工具
    OC 2007 ADM 管理模板和Live Meeting 2007 ADM 管理模板发布
    Office Communications Server 2007 R2 即将发布
  • 原文地址:https://www.cnblogs.com/chiweiming/p/10700761.html
Copyright © 2011-2022 走看看