A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wangyuyus 中级黑马   /  2013-11-15 13:18  /  1356 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 wangyuyus 于 2013-11-16 12:23 编辑

这是ArrayList集合添加元素的时候去掉重复元素
public boolean equals(Object obj)
{

        if(!(obj instanceof Person))  //
                return false;
        Person p = (Person)obj;
        System.out.println(this.name+"...equals.."+p.name);
        return this.name.equals(p.name) && this.age == p.age;
}

这里 的 obj instanceof Person 是什么意思,是每次添加一个信息的时候都判断一次么

评分

参与人数 1黑马币 +9 收起 理由
FFF + 9 因标题标得不明确。所以只能给你金币鼓励了.

查看全部评分

7 个回复

倒序浏览
滔哥 黑马帝 2013-11-15 13:35:49
沙发
提问,标题明确
回复 使用道具 举报
  java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
用法:
result = object instanceof class
参数:
Result:布尔类型。
Object:必选项。任意对象表达式。
Class:必选项。任意已定义的对象类。
说明:
如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。
没添加信息就会判断

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 qw无语 于 2013-11-15 14:20 编辑

ArrayList al = new ArrayList();
                al.add("java01");
                al.add("java02");
                al.add("java01");
当你使用add方法时候,就会使用你加入元素的equals方法
比如这个加入字符串,第一次添加"java01"他判断集合中没有元素,就不会使用equals
第二次,你添加"java02",他会使用字符串的equals方法比较集合所有元素,没有一样的就存入
第三次,你添加"java01",他会使用字符串的equals方法比较集合所有元素,有一样的都不存入
当你存入一个对象,那么你就要复写equals,写出你需要的比方法.
  if(!(obj instanceof Person))  //楼上详细些 这个方法
//因为对象不一样就不需要比较下面了
                return false;
        Person p = (Person)obj;
        System.out.println(this.name+"...equals.."+p.name);
        return this.name.equals(p.name) && this.age == p.age;
每加入新一个元素都会和集合中所有元素比较一次,就只执行add的元素的equals方法

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
这个涉及到多态。
首先equals这个方法是用于判断两个元素相不相同,试想一下,如果类型不一样,这两个元素是一样的吗?
答案是肯定不一样。
所以,传到equals方法里面的对象,要先判断他是否是Person类型的,如果不是,那么不用比较了,这两个元素肯定不一样,可以添加到集合中(前提是这个集合没有添加泛型限定)。
obj instanceof Person 二它的意思就是问这个obj,嘿,哥们,你是伪装成毕姥爷的毕老师吗?(视频里面毕老师举的例子)换成专业点的讲话就是,obj是Person类型的吗?

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 山寨

查看全部评分

回复 使用道具 举报
每次添加信息就会判断一次
回复 使用道具 举报
hel 中级黑马 2013-11-15 14:33:45
7#
instanceof  就是判断你传进来的参数obj是不是Person类型的。
比如:
你传进来的是dog.name .他不是person类型的它属于dog类的
所以会返回false,你传进来的都不是想要的那还判断他干嘛

你传进来的是person.name .会返回true

这句话是每次都会判断的
回复 使用道具 举报
obj instanceof Person//这句话问的含义是你传进来的对象是不是属于Person类。
是每次添加一个信息的时候都判断一次么?
答:是你每次调用equals(Object obj)这个函数时,第一个任务就是判断你传进来的对象是不是属于Person类,是就继续下面的程序,不属于Person类直接返回false。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马