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

为什么removeAll()会删除所有相同的元素?

3:HTML

1:数据结构

2:C语言

4:数学

5:汇编语言英语

1:数据结构


修改后:--删除后的课程列表--

3:HTML

4:数学

5:汇编语言英语



这是我删除后控制台显示的,为什么我只让删除下表1和2的数据,却连下表5的元素也删除了。只是因为下表1和5的元素内容相同而已。我修改下表5的内容后再执行删除就没有问题。下面是代码:


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

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

System.out.println("--删除后的课程列表--");

testForeach();


正在回答

3 回答

上面那个原因再补充一下,虽然它比较的是地址,但是用的不是 == ,用的equals方法,不要疑惑,因为集合里放的是对象的地址,不信你可以输出来看看,别重写Course的toString方法,然后用courseofselect.toString()方法输出。。所以上面我说的两种情况的结果是不一样的,这是我看ArrayList类里的removeAll方法得出的结论,如果我有哪地方说错了还望各位网友路过的话有时间的话指出,谢谢噻~(单词大小写的错误就不要指出了,主要我在自己电脑上写的时候写的courseofselect)

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

跟你添加到集合中的元素有关。

如果你是这样添加的,Course c1 = new ("1","数据结构"); courseofselect.add(c1);courseofselect.add(c1);这样的话你删除就会把你所添加到集合中的值为数据结构这个Course对象都删除。因为你添加的是相同内存地址的对象,也就是一个对象。

如果你是这样添加的,Course c1 = new ("1","数据结构");Course c2 = new ("1","数据结构"); courseofselect.add(c1);courseofselect.add(c2);这样你删除的话就只会删除你指定位置的元素。

原因是,ArrayList对象的removeall方法删除元素,它内部调用的是batchRemove方法,利用的是元素的内存地址比较去删除元素。


2 回复 有任何疑惑可以回复我~
Course[] crs = { (Course) (coursesToSelect.get(2)), (Course) (coursesToSelect.get(1)) };
coursesToSelect.removeAll(Arrays.asList(crs));

System.out.println("--删除后的课程列表--");
testForeach();


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

举报

0/150
提交
取消

为什么removeAll()会删除所有相同的元素?

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