weibo_爱你发自内心的微笑_0
2018-08-31 18:53
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();
上面那个原因再补充一下,虽然它比较的是地址,但是用的不是 == ,用的equals方法,不要疑惑,因为集合里放的是对象的地址,不信你可以输出来看看,别重写Course的toString方法,然后用courseofselect.toString()方法输出。。所以上面我说的两种情况的结果是不一样的,这是我看ArrayList类里的removeAll方法得出的结论,如果我有哪地方说错了还望各位网友路过的话有时间的话指出,谢谢噻~(单词大小写的错误就不要指出了,主要我在自己电脑上写的时候写的courseofselect)
跟你添加到集合中的元素有关。
如果你是这样添加的,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方法,利用的是元素的内存地址比较去删除元素。
Course[] crs = { (Course) (coursesToSelect.get(2)), (Course) (coursesToSelect.get(1)) }; coursesToSelect.removeAll(Arrays.asList(crs)); System.out.println("--删除后的课程列表--"); testForeach();
Java入门第三季
409792 学习 · 4340 问题
相似问题