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

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

removeAll原理?

老師在課程中將Course類寫成數組,并運用removeAll()方法去掉了List類型的對象coursesToSelect中的相同屬性的元素,于是我想,可不可以通過同樣為List類型的對象來代替這個數組達成刪除的目的,我首先實驗了以下代碼:

//第1個代碼

public static void main(String[] args) {

???? List clas = new ArrayList();

???? clas.add(new classes(1,"Miker"));

???? clas.add(new classes(2,"Chen"));

???? clas.add(new classes(3,"Joker"));

???? clas.add(new classes(4,"Li"));

????

???? List clas2 = new ArrayList();

???? clas2.add(new classes(3,"Joker"));

???? clas2.add(new classes(4,"Li"));

???? for(Object o:clas) {

???????? classes obj = (classes)o;

???????? System.out.println("id:"+obj.id+" name:"+obj.name);

???? }

????clas.removeAll(clas2);

???? for(Object o:clas) {

???????? classes obj = (classes)o;

???????? System.out.println("id:"+obj.id+" name:"+obj.name);

????}

}

我發現第2,3兩個元素并沒有被刪除,于是參考老師的方法直接從原List對象中get元素,

//第2個代碼

public static void main(String[] args) {

???? List clas = new ArrayList();

???? clas.add(new classes(1,"Miker"));

???? clas.add(new classes(2,"Chen"));

???? clas.add(new classes(3,"Joker"));

???? clas.add(new classes(4,"Li"));

????

???? List clas2 = new ArrayList();

???? clas2.add(clas.get(2));

???? clas2.add(clas.get(3));


???? for(Object o:clas) {

???????? classes obj = (classes)o;

???????? System.out.println("id:"+obj.id+" name:"+obj.name);

???? }


????clas.removeAll(clas2);


???? for(Object o:clas) {

???????? classes obj = (classes)o;

???????? System.out.println("id:"+obj.id+" name:"+obj.name);

????}

}

這樣就可以成功刪除了,請問這是因為什么呢?

正在回答

1 回答

  1. 首先第1個代碼中的clas2中的元素其實與clas中的第3,4個元素只是值相同,他們的引用地址是不同的。因為clas2中的元素是重新申請內存空間,創建了"Joker"、“Li”。也就是說clas和clas2中只是有兩個值相同的元素。

  2. 第2個代碼成功的原因,其實由上述1可以知道。通過clas2.add(clas.get(2));添加的元素是與clas中元素的引用地址相同,因此能夠通過clas2刪除clas中的元素。

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
Java入門第三季
  • 參與學習       409767    人
  • 解答問題       4543    個

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

進入課程

removeAll原理?

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

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

幫助反饋 APP下載

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

公眾號

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