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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王永彬 中级黑马   /  2013-1-17 23:26  /  2280 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王永彬 于 2013-1-18 07:03 编辑

在集合中删除某个元素的时候,为什么还要再写一次new关键字呢?如:System.out.println(ts.remove(new R(-2)));而不是ts.remove(R(-2))?

5 个回复

倒序浏览
R(-2),如果R是类名,这个是语法错误了。使用new R(-2)是因为在R中重写了hashcode和equals方法,自定义比较内容,所以使用new不会出错
回复 使用道具 举报
System.out.println(ts.remove(new R(-2)))
根据这代码。应该是个链表类 的泛型<R>集合 ,remove(对象),
R(-2)这个代表什么?不能代表对象吧?
创建对象开空间就是要new 出来。。。不管你对象里面写的什么参型的构造方法。。。
回复 使用道具 举报

RE: 关于集合删除元素的问题!

王少雷 发表于 2013-1-18 00:05
System.out.println(ts.remove(new R(-2)))
根据这代码。应该是个链表类 的泛型集合 ,remove(对象),
R(-2) ...

我想我明白了!谢谢!
回复 使用道具 举报
本帖最后由 司懿卓 于 2013-1-18 19:42 编辑

new R(-2) : 应该是创建了一个 Field 为int 型的对象.
因为,你在添加到集合中时,是 ts.add(new R(-2));这样添加的. new R(-2)没有引用,是临时创建的对象.
所以你在删除时,不能直接删除R (-2).  所以只能创建一个相同的对象用来删除. 就是 ts.remove(new R(-2));
这个应该是set集合, 是无序的,不可重复的,只能通过集合元素本身来访问.
所以,这个集合的 equals 方法和hashCode方法必须被重写,
equals通过Field和哈希值的比较来确定是否是同一个对象..
一般,重写后是new R(-2) == new R(-2) ..
故此,ts.remove(new R(-2))  就是删除之前添加的那个对象...

Field 是成员变量..

点评

回答的很仔细,不过此问题已设置为已解决,请多关注未解决问题  发表于 2013-1-19 12:31

评分

参与人数 1黑马币 +9 收起 理由
Rancho_Gump + 9 赞一个!

查看全部评分

回复 使用道具 举报

RE: 关于集合删除元素的问题!

司懿卓 发表于 2013-1-18 19:40
new R(-2) : 应该是创建了一个 Field 为int 型的对象.
因为,你在添加到集合中时,是 ts.add(new R(-2));这 ...

谢谢你,解释的很透彻,明白了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马