為什么removeAll()會(huì)刪除所有相同的元素?
3:HTML
1:數(shù)據(jù)結(jié)構(gòu)
2:C語(yǔ)言
4:數(shù)學(xué)
5:匯編語(yǔ)言英語(yǔ)
1:數(shù)據(jù)結(jié)構(gòu)
修改后:--刪除后的課程列表--
3:HTML
4:數(shù)學(xué)
5:匯編語(yǔ)言英語(yǔ)
這是我刪除后控制臺(tái)顯示的,為什么我只讓刪除下表1和2的數(shù)據(jù),卻連下表5的元素也刪除了。只是因?yàn)橄卤?和5的元素內(nèi)容相同而已。我修改下表5的內(nèi)容后再執(zhí)行刪除就沒(méi)有問(wèn)題。下面是代碼:
Course[] crs = { (Course) (coursesToSelect.get(2)), (Course) (coursesToSelect.get(1)) };
coursesToSelect.removeAll(Arrays.asList(crs));
System.out.println("--刪除后的課程列表--");
testForeach();
2018-12-30
上面那個(gè)原因再補(bǔ)充一下,雖然它比較的是地址,但是用的不是 == ,用的equals方法,不要疑惑,因?yàn)榧侠锓诺氖菍?duì)象的地址,不信你可以輸出來(lái)看看,別重寫(xiě)Course的toString方法,然后用courseofselect.toString()方法輸出。。所以上面我說(shuō)的兩種情況的結(jié)果是不一樣的,這是我看ArrayList類里的removeAll方法得出的結(jié)論,如果我有哪地方說(shuō)錯(cuò)了還望各位網(wǎng)友路過(guò)的話有時(shí)間的話指出,謝謝噻~(單詞大小寫(xiě)的錯(cuò)誤就不要指出了,主要我在自己電腦上寫(xiě)的時(shí)候?qū)懙腸ourseofselect)
2018-12-30
跟你添加到集合中的元素有關(guān)。
如果你是這樣添加的,Course c1 = new ("1","數(shù)據(jù)結(jié)構(gòu)"); courseofselect.add(c1);courseofselect.add(c1);這樣的話你刪除就會(huì)把你所添加到集合中的值為數(shù)據(jù)結(jié)構(gòu)這個(gè)Course對(duì)象都刪除。因?yàn)槟闾砑拥氖窍嗤瑑?nèi)存地址的對(duì)象,也就是一個(gè)對(duì)象。
如果你是這樣添加的,Course c1 = new ("1","數(shù)據(jù)結(jié)構(gòu)");Course c2 = new ("1","數(shù)據(jù)結(jié)構(gòu)");?courseofselect.add(c1);courseofselect.add(c2);這樣你刪除的話就只會(huì)刪除你指定位置的元素。
原因是,ArrayList對(duì)象的removeall方法刪除元素,它內(nèi)部調(diào)用的是batchRemove方法,利用的是元素的內(nèi)存地址比較去刪除元素。
2018-08-31