2015-01-14 244 views
0

我想添加類Document的對象到循環中的ArrayList。 問題是,每一次的對象更改,列表的prevous內容也發生了變化如何將地圖添加到arraylist,值

這裏是我的文檔類:

public class Document { 
    public Map<String, Double> tokens; 
    public String category;  
} 

和我有列表數據集:

List<Document> dataset = new ArrayList<Document>(); 

我將文件中的所有令牌從文件讀取到名爲counts的映射。然後按照以下步驟操作

doc = new Document(); 
doc.tokens = counts; 
doc.category=sampleCategory; 
dataset.add(doc); 

counts.clear(); 

但每次我讀新文檔時,數據集的內容都會更改爲新文檔的值。 那麼,我怎麼能通過價值而不是通過參考添加文檔?

+0

你在問如何製作一個'Document'對象的副本嗎? –

+0

在Java中,您無法按值傳遞對象。您按值傳遞對象**引用**。 – m0skit0

+0

可能的重複[是Java「通過引用傳遞」還是「傳遞值」?](http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass - 按值) – m0skit0

回答

2

看起來像你正在爲所有的Document實例添加相同的「計數」對象。取而代之的counts.clear(),分配計數到相應類型的新實例:

counts = new HashMap<String, Double> 
+0

非常感謝,解決了這個問題 –

0

你重用相同的情況下計數sampleCategory每次,所以任何修改將修改休息。

您應該每次創建一個新對象,然後分配到新文檔