2015-01-14 231 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每次,所以任何修改将修改休息。

您应该每次创建一个新对象,然后分配到新文档