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

removeAll()方法问题

课程中讲到removeAll方法的用途如下

Course[] crToRemove = {(Course)coursesToSelect.get(1),(Course)coursesToSelect.get(2)};

coursesToSelect.removeAll(Arrays.asList(crToRemove));

如果我把(Course)coursesToSelect.get(1)换成一个Course对象还能不能删除对应数据呢?像下面这样(方式2)

Course[] crToRemove = {new Course(2, "C语言"),new Course(3, "数学")};

coursesToSelect.removeAll(Arrays.asList(crToRemove));

我测试了一下,没有删除,是因为方式2中的new Course(2, "C语言")重新声明了一个对象,跟List中的对象不一样吗?

正在回答

3 回答

我也是新手,个人见解,如有错误请见谅。

Course[] crToRemove = {(Course)coursesToSelect.get(1),(Course)coursesToSelect.get(2)};

就相当于根据索引get到了两个值,放在了数组中。然后直接移除两个值。

Course[] crToRemove = {new Course(2, "C语言"),new Course(3, "数学")};

这一步做添加操作的时候就会做,是新声明两个元素,然后add到集合中。 这里要注意的是 2,3 并不是集合的索引,而是你添加的元素,替换成“任意值”也是一个性质。 所以你remove的时候没有得到索引,根本无法执行删除操作。


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

迷茫的土拨鼠 提问者

嗯嗯,是这样的,无论是对象还是索引值都是不同的,积分拿去
2017-11-08 回复 有任何疑惑可以回复我~

是这样的:

Course[] crToRemove = {(Course)coursesToSelect.get(1),(Course)coursesToSelect.get(2)};

coursesToSelect.removeAll(Arrays.asList(crToRemove));

这种方法是从集合中获取到之前添加的对象放到数组中,然后统一删除从集合中获取到的所有数据,能删除没问题;

Course[] crToRemove = {new Course(2, "C语言"),new Course(3, "数学")};

coursesToSelect.removeAll(Arrays.asList(crToRemove));

这种方式,是新创建两个对象(这两个新创建的对象和之前的已经在集合中添加过相同id和相同名字的对象,不能看做是同一个对象,最起码两者内存地址是不相同的),新创建的两个对象并不存在集合中,所以删除失;

理解下面代码你就明白了:

Course a=new Course(2, "C语言");

Course b=new Course(2, "C语言");

a和b虽然属性id和name相同,却是不同的对象(堆内存中的位置不同),a放入集合中,然后在集合中移出b,肯定失败,因为集合中根本没有存放b;如果集合中同时放入a和b,两者索引也不会相同;



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

嗯嗯,是这样的,无论是对象还是索引值都是不同的,积分拿去

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

举报

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

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

进入课程

removeAll()方法问题

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