2011-06-16 69 views
8

我必須使用現有的應用程序,並且存在一個列表,其中存儲所有呈現的對象,以便稍後在gui更改時將其刪除。Java如何將對象存儲在列表中?

這是List:

private List<Component> registeredComponents = new ArrayList<Component>(); 

現在我想知道如果只的Java的對象(ZK組件),或者如果它存儲的對象的副本存儲引用。問題是如果我應該刪除這個。

+0

也許是脫離主題但知道何時使用集合(列表,集合等):您可能想要在列表中使用像contains(),add()這樣的方法,但這些方法只有在object(你的Component類)覆蓋了equals()和hashcode()。 (大多數IDE都有爲您生成這些功能的功能)。如果你不這樣做,那麼它會比較對象引用而不是它的內容... – dm76 2011-06-16 09:58:09

回答

13

該列表將包含僅供參考。這適用於所有類型的集合,而不僅僅是ArrayLists。

在Java中實際上有沒有辦法來「掌握」對象本身。當你創建一個新的對象時,你所得到的就是對它的引用(並且沒有辦法通過使用例如在C++中的*運算符來「解除引用」它)。

+0

你可以通過覆蓋clone()方法來深入複製對象本身,例如 – Alexandr 2011-06-16 09:55:39

+2

不,你最終會並提及對象的副本。 – aioobe 2011-06-16 09:57:54

+0

這是默認設置。您可以覆蓋該行爲。見http://www.java2s.com/Code/Java/Language-Basics/DeepCopyTest.htm – Alexandr 2011-06-16 09:59:59

3

列表存儲對對象的引用,而不是副本。對象實例與碰巧又有其他引用的其他人共享。

至於想要刪除這個,如果你有其他的方法可以在以後從GUI中刪除對象(也許你可以查詢父組件或其他東西),那麼List可能是多餘的。但即使是這樣,這裏可能沒有太多的開銷,也不會讓你的程序變得複雜。

+0

謝謝你的回答。 – mw88 2011-06-16 11:20:20

相關問題