为了账号安全,请及时绑定邮箱和手机立即绑定

removeAll的问题

Course数组里面如果是new的course对象,则后面删除的时候不成功,这是为什么,比如

Course [] cr2 = {(Course)(new Course("5", "算法设计"))};

courseToSelect.removeAll(Arrays.asList(cr2));

则删除不了里面的算法设计这一项,请问是为什么,求高手解答

正在回答

2 回答

(Course)(new Course("5", "算法设计"))觉得这样写是不是没有必要,本身你定义的就是Course类型的数组,你还需要在前面添加(Course)吗?Course时数组类型

0 回复 有任何疑惑可以回复我~

Course [] cr2 = {(Course)(new Course("5", "算法设计"))}

这边你已经把课程对象强转为course类型了,不能算一个课程对象了

0 回复 有任何疑惑可以回复我~
#1

ting0fdnb 提问者

course类型就是课程类型啊,而且如果用ArrayList.get方法获取object对象再强制转换成course对象的话,就是可以删除的,语句:Course [] cr2 = {(Course)courseToSelect.get(1),(Course)courseToSelect.get(4)};这样是可以删除两个对象的。这两个强制类型转换是一样的啊,为什么结果不一样
2016-03-15 回复 有任何疑惑可以回复我~
#2

ting0fdnb 提问者 回复 ting0fdnb 提问者

也许是new的对象和List中的对象虽然值是相同的,但是他们其实是不同的对象,所以后面就不能删除,然而通过get方法获得的就是相同对象的地址,所以就可以删除对象了。基于这个基础上提出新的问题,Set中的元素不可以重复,那如果是值相同但是不是相同对象,这又能不能重复呢?
2016-03-21 回复 有任何疑惑可以回复我~
#3

ting0fdnb 提问者 回复 ting0fdnb 提问者

经过测试,使用for循环,如果HashMap的Add方法每次插入的都是重新new的对象,尽管值相同都可以插入进去,则表明如果对象不同的话,值相同,在set里面是可以共存的;如果只是new了一次,在for循环里面不断插入此对象,则不能重复插入。所以set里面不能重复是说对象不能重复,不是说值不能重复。MARK!
2016-03-21 回复 有任何疑惑可以回复我~
#4

helloworld2008 回复 ting0fdnb 提问者

【呵呵,刚开始自己写代码的时候就是这么写的,但是看了下讲师的,就意识到这样是不行的。】 new一个对象出来,就会分配一个新的地址出来,即使内容相同,也是两个对象,你new出来的对象没有利用add加入到List表中,表中无此数据,又何来删除之说呢?
2016-06-19 回复 有任何疑惑可以回复我~
查看1条回复

举报

0/150
提交
取消
Java入门第三季
  • 参与学习       409792    人
  • 解答问题       4340    个

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

进入课程

removeAll的问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信