0

所以,我正在尝试包含一个术语的文档列表,然后将相应的 document_id 和术语频率输入到一个数组(大小为 2)中。然后我将此条目数组添加到列表中,以便最终列表包含所有条目。但是,由于该条目是通过引用传递到 List 中的,所以我不知道如何完成此操作,因为它每次都会自行重写。而且由于数据的大小,如果我尝试在 while 循环中声明一个新的 int[] 条目,我的程序就会耗尽内存。关于如何通过这个的任何想法?我对我的 Java 生疏了。谢谢。

List<int[]> occurenceIndex = new ArrayList<>();
int[] entry = new int[2];  

while (matchedDocs.next())
{
    entry[0] = (matchedDocs.doc());    // Adds document id 
    entry[1] = (matchedDocs.freq());   // Adds term weight
    occurenceIndex.add(entry);
}
4

3 回答 3

2

尝试在循环内创建 int 数组的新对象。

List<int[]> occurenceIndex = new ArrayList<>();
while (matchedDocs.next())
{
   int[] entry = new int[2];
   entry[0] = (matchedDocs.doc());    // Adds document id 
   entry[1] = (matchedDocs.freq());   // Adds term weight
   occurenceIndex.add(entry);
}
于 2013-02-20T23:43:31.267 回答
2

你必须放入int[] entry = new int[2];while循环

它是否需要是一个int,字节或短呢?如果这是不可能的,那么程序需要重构,因为没有办法使用相同的数组实例来存储这样的数组。– Neil Locketz 1 分钟前 编辑

于 2013-02-20T23:43:31.530 回答
0

考虑使用HashMap来存储记录。

Map<Integer, Integer> occurenceIdx = new HashMap<Integer, Integer>();
while(matchedDocs.next())
    occurenceIdx.put(matchedDocs.doc(), matchedDocs.freq());

这就是创建地图所​​需的所有代码。根据文档 ID 检索值

docFreq = occurenceIdx.get(docId);

请注意,这仅适用于您拥有唯一文档 ID 的情况。如果没有,您将不得不在此解决方案上即兴发挥。我可能会让我的地图HashMap<Integer, List<Integer>>支持多个 docID 实例

于 2013-02-20T23:45:25.533 回答