2012-02-15 53 views
1

比方說,你有兩個列表聲明:爲什麼要爲Java ArrayList的remove方法分配一個變量,會產生什麼後果?

ArrayList listA = new ArrayList(); 
ArrayList<Book> listB = new ArrayList<Book>(); 

然後你有這些語句:

Object obj = listA.remove(2); 
Book bk = listB.remove(2); 
String str = listA.remove(1); 

假設有在每個指定地點的對象,爲什麼你要分配這些變量的方法,以及它的後果是什麼?我已經三次閱讀本章,但我仍然不明白這一點。我錯過了什麼?

回答

2

縱觀三句話:

第一個Object obj = listA.remove(2)使用原始類型。該定義包含Object。一切都從Object繼承,所以它可以保存任何東西。這可能會導致問題。看看這個post看看爲什麼這是不可取的。

第二個是強類型。您只能刪除項目並將其分配給定義中的類型(在ArrayList<Book>中,它必須與Book匹配)。這是java編譯器檢查類型的一種方法,以確保您使用的是所有相同的類型。如果你不匹配,我相信這是一個編譯器錯誤。

第三個演示爲什麼第一個項目是一個問題。閱讀post,它會告訴你爲什麼。

+0

你把一隻貓咪放進去,當你想把它拿出來時,它是......一個物體。鬱悶:-( – wmz 2012-02-16 00:01:09

+0

呵呵,我明白了,當你試圖將被刪除的項目賦給一個不同類型的變量時,會出現編譯錯誤,我以前怎麼沒有意識到這一點? – helloimbarbara 2012-02-16 00:11:09

0

當ArrayList使用#remove(Object obj)方法時,如果成功刪除,則返回true;如果未刪除,則返回false。

編輯:剛纔注意到我在那裏使用了Object參數。除了索引參數方法之外,它還返回被刪除的值。

這可以用於從1列表轉移到另一個列表,或者有時甚至在遞歸方法中。

+2

[This is not correct](http://docs.oracle.com/javase/1.4.2/docs/api/java/util/ArrayList.html#remove \(int \)) – 2012-02-15 23:40:24

+0

我以爲刪除函數返回在該位置被刪除的項目。 – helloimbarbara 2012-02-15 23:41:00

+0

哦,不要忘了,我只注意到@Banthars的迴應。 – helloimbarbara 2012-02-15 23:41:32

3

remove(int)方法從列表中刪除一個對象並返回被刪除的對象。刪除對象與刪除對象不一樣......你可能有一個用例,你想刪除一個對象,但仍然想用它做些事情。如果你真的不希望對象是刪除後,就是不給它分配,如

list.remove(3) 

這將刪除對象的偏移量(3)和不保留對它的引用。如果沒有其他參考,它最終會被垃圾收集。

相關問題