如何按值将映射添加到arraylist

how to add a map to arraylist, by value

我正在尝试将 class 文档的对象添加到循环中的数组列表中。 问题是每次对象改变时,列表中的先前内容也会改变

这是我的文档 class:

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();

但每次我阅读新文档时,数据集的内容都会更改为新文档的值。 那么如何按值而不是按引用添加文档?

您似乎在向所有文档实例添加相同的 'counts' 对象。将计数分配给相应类型的新实例,而不是 counts.clear()

counts = new HashMap<String, Double>

您每次都为 countssampleCategory 重复使用 相同实例,因此任何修改将修改其余部分。

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