如何使用while循环填充List而不是每次都声明一个新对象?

时间:2013-02-20 23:40:38

标签: java arrays list while-loop

所以,我正在尝试查找包含术语的文档列表,然后将相应的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);
}

3 个答案:

答案 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实例