所以,我正在尝试查找包含术语的文档列表,然后将相应的document_id和术语频率输入到数组(大小为2)中。然后我将此条目数组添加到List中,以便最终的List包含所有条目。但是,因为条目通过引用传递给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);
}
答案 0 :(得分: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);
}
答案 1 :(得分:2)
您必须将int[] entry = new int[2];
放入while循环
它需要是一个int,字节还是短?如果这是不可能的,那么程序需要重新计算,因为没有办法使用相同的数组实例存储这样的数组。 - Neil Locketz 1分钟前编辑
答案 2 :(得分: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实例