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中的對象不一樣嗎?
2017-11-08
我也是新手,個人見解,如有錯誤請見諒。
Course[] crToRemove = {(Course)coursesToSelect.get(1),(Course)coursesToSelect.get(2)};
就相當于根據索引get到了兩個值,放在了數組中。然后直接移除兩個值。
Course[] crToRemove = {new Course(2, "C語言"),new Course(3, "數學")};
這一步做添加操作的時候就會做,是新聲明兩個元素,然后add到集合中。 這里要注意的是 2,3 并不是集合的索引,而是你添加的元素,替換成“任意值”也是一個性質。 所以你remove的時候沒有得到索引,根本無法執行刪除操作。
2018-07-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,兩者索引也不會相同;
2017-11-08
嗯嗯,是這樣的,無論是對象還是索引值都是不同的,積分拿去