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