removeAll()方法問題
課程中講到removeAll方法的用途如下
Course[] crToRemove = {(Course)coursesToSelect.get(1),(Course)coursesToSelect.get(2)};
coursesToSelect.removeAll(Arrays.asList(crToRemove));
如果我把(Course)coursesToSelect.get(1)換成一個(gè)Course對象還能不能刪除對應(yīng)數(shù)據(jù)呢?像下面這樣(方式2)
Course[] crToRemove = {new Course(2, "C語言"),new Course(3, "數(shù)學(xué)")};
coursesToSelect.removeAll(Arrays.asList(crToRemove));
我測試了一下,沒有刪除,是因?yàn)榉绞?中的new?Course(2, "C語言")重新聲明了一個(gè)對象,跟List中的對象不一樣嗎?
2017-11-08
我也是新手,個(gè)人見解,如有錯(cuò)誤請見諒。
Course[] crToRemove = {(Course)coursesToSelect.get(1),(Course)coursesToSelect.get(2)};
就相當(dāng)于根據(jù)索引get到了兩個(gè)值,放在了數(shù)組中。然后直接移除兩個(gè)值。
Course[] crToRemove = {new Course(2, "C語言"),new Course(3, "數(shù)學(xué)")};
這一步做添加操作的時(shí)候就會做,是新聲明兩個(gè)元素,然后add到集合中。 這里要注意的是 2,3 并不是集合的索引,而是你添加的元素,替換成“任意值”也是一個(gè)性質(zhì)。 所以你remove的時(shí)候沒有得到索引,根本無法執(zhí)行刪除操作。
2018-07-08
是這樣的:
Course[] crToRemove = {(Course)coursesToSelect.get(1),(Course)coursesToSelect.get(2)};
coursesToSelect.removeAll(Arrays.asList(crToRemove));
這種方法是從集合中獲取到之前添加的對象放到數(shù)組中,然后統(tǒng)一刪除從集合中獲取到的所有數(shù)據(jù),能刪除沒問題;
Course[] crToRemove = {new Course(2, "C語言"),new Course(3, "數(shù)學(xué)")};
coursesToSelect.removeAll(Arrays.asList(crToRemove));
這種方式,是新創(chuàng)建兩個(gè)對象(這兩個(gè)新創(chuàng)建的對象和之前的已經(jīng)在集合中添加過相同id和相同名字的對象,不能看做是同一個(gè)對象,最起碼兩者內(nèi)存地址是不相同的),新創(chuàng)建的兩個(gè)對象并不存在集合中,所以刪除失;
理解下面代碼你就明白了:
Course a=new Course(2, "C語言");
Course?b=new Course(2, "C語言");
a和b雖然屬性id和name相同,卻是不同的對象(堆內(nèi)存中的位置不同),a放入集合中,然后在集合中移出b,肯定失敗,因?yàn)榧现懈緵]有存放b;如果集合中同時(shí)放入a和b,兩者索引也不會相同;
2017-11-08
嗯嗯,是這樣的,無論是對象還是索引值都是不同的,積分拿去