亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

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入門第三季
  • 參與學習       409767    人
  • 解答問題       4543    個

Java中你必須懂得常用技能,不容錯過的精彩,快來加入吧

進入課程

removeAll()方法問題

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號