Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用while循环填充列表而不每次声明新对象?_Java_Arrays_List_While Loop - Fatal编程技术网

Java 如何使用while循环填充列表而不每次声明新对象?

Java 如何使用while循环填充列表而不每次声明新对象?,java,arrays,list,while-loop,Java,Arrays,List,While Loop,因此,我尝试对包含一个术语的文档列表进行排序,然后将相应的文档id和术语频率输入一个数组(大小为2)。然后,我将这个条目数组添加到一个列表中,这样最终的列表就包含了一个包含所有条目的数组。但是,因为条目是通过引用传递到列表中的,所以我不知道如何实现这一点,因为它每次都会重写自己。由于数据的大小,如果我试图在while循环中声明一个新的int[]条目,我的程序就会耗尽内存。关于如何通过这个有什么想法吗?我是一个新手,但对我的Java已经生疏了。谢谢 List<int[]> occure

因此,我尝试对包含一个术语的文档列表进行排序,然后将相应的文档id和术语频率输入一个数组(大小为2)。然后,我将这个条目数组添加到一个列表中,这样最终的列表就包含了一个包含所有条目的数组。但是,因为条目是通过引用传递到列表中的,所以我不知道如何实现这一点,因为它每次都会重写自己。由于数据的大小,如果我试图在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);
}
List-occurrenceindex=new-ArrayList();
int[]条目=新的int[2];
while(matchedDocs.next())
{
条目[0]=(matchedDocs.doc());//添加文档id
条目[1]=(matchedDocs.freq());//添加术语权重
事件索引。添加(条目);
}

尝试在循环内创建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);
}
List-occurrenceindex=new-ArrayList();
while(matchedDocs.next())
{
int[]条目=新的int[2];
条目[0]=(matchedDocs.doc());//添加文档id
条目[1]=(matchedDocs.freq());//添加术语权重
事件索引。添加(条目);
}

尝试在循环内创建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);
}
List-occurrenceindex=new-ArrayList();
while(matchedDocs.next())
{
int[]条目=新的int[2];
条目[0]=(matchedDocs.doc());//添加文档id
条目[1]=(matchedDocs.freq());//添加术语权重
事件索引。添加(条目);
}

您必须输入
int[]条目=新的int[2]编码到while循环中


它需要是一个int,那么byte或short呢?如果这是不可能的,那么程序需要重新分解,因为无法使用相同的数组实例存储这样的数组Neil Locketz 1分钟前编辑

您必须输入
int[]条目=新的int[2]编码到while循环中


它需要是一个int,那么byte或short呢?如果这是不可能的,那么程序需要重新分解,因为无法使用相同的数组实例存储这样的数组Neil Locketz 1分钟前编辑

考虑使用
HashMap
存储记录

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

请注意,仅当您具有唯一的文档ID时,此操作才有效。如果没有,您将不得不临时制定此解决方案。我可能会将我的映射设置为
HashMap
以支持docID的多个实例考虑使用
HashMap
来存储记录

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


请注意,仅当您具有唯一的文档ID时,此操作才有效。如果没有,您将不得不临时制定此解决方案。我可能会使我的映射成为一个
HashMap
以支持docID的多个实例

您的数据的大小是多少?您的数据的大小是多少?
并且由于数据的大小,如果我尝试在while循环中声明一个新的int[]条目,我的程序的内存就会耗尽
您可以使用映射并向其中添加文档。假设id是唯一的。如果失败,则分配更多内存。op需要检查映射解决方案是否适合他
,并且由于数据的大小,如果我尝试在while循环中声明一个新的int[]条目,则我的程序的内存将耗尽。您可以使用映射并向其添加文档。假设id是唯一的。如果失败,则分配更多内存。op需要检查映射解决方案是否适合他
,并且由于数据的大小,如果我尝试在while循环中声明一个新的int[]条目,我的程序内存不足
,它是否需要是int,字节还是short?如果这是不可能的,那么程序需要重新分解,因为无法使用相同的数组实例存储这样的数组。OP需要回答这个问题。我同意,如果每次迭代都不使用新对象,就无法存储数组
,并且由于数据的大小,如果我试图在while循环中声明一个新的int[]条目,那么我的程序的内存将耗尽
它是否需要是int,字节或short呢?如果这是不可能的,那么程序需要重新分解,因为无法使用相同的数组实例存储这样的数组。OP需要回答这个问题。我同意,如果每次迭代都不使用新对象,就无法存储数组。如果他有Duplicate docId,怎么样?列表的顺序呢?我会在回答中作为注释提及。此外,OP没有提及任何关于列表顺序的内容,因此我不确定这是否是一个约束。谢谢,这很有效!文档ID确实是唯一的,而且顺序也不重要,只要我能检索到它们。如果他有重复的文档ID呢?列表的顺序呢?我会在回答中作为注释提及。此外,OP没有提及任何关于列表顺序的内容,因此我不确定这是否是一个约束。谢谢,这很有效!文档ID确实是唯一的,只要我能够检索它们,顺序就不重要了。