2013-02-20 1 views
0

그래서 용어를 포함하는 문서 목록을 작성한 다음 해당 document_id와 용어 빈도를 배열 (크기 2)에 입력하려고합니다. 그런 다음이 항목 배열을 목록에 추가하여 최종 목록에 모든 항목이 포함되도록합니다. 그러나 항목이 참조로 참조로 전달되기 때문에 매번 다시 작성되므로이 작업을 수행하는 방법을 모릅니다. 그리고 데이터의 크기 때문에 while 루프 내에서 새로운 int [] 항목을 선언하려고하면 프로그램이 메모리가 부족합니다. 이 방법을 전달하는 방법에 대한 아이디어가 있습니까? 나는 자바에 녹슬지 만. 감사.매번 새로운 객체를 선언하지 않고 List를 while 루프로 채우는 방법?

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

데이터 크기는 얼마입니까? – Javier

답변

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의 여러 인스턴스를 지원할 수 있습니다.

+0

그가 docip의 dupplicate를 가지고 있다면 어떨까요? 목록의 순서? –

+0

나는 그것을 내 대답에서 언급 할 것이다. – Achrome

+0

또한, OP는 목록의 순서에 대해서는 언급하지 않으므로 제약 조건인지 확신 할 수 없습니다. – Achrome

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); 
} 
+0

'그리고 데이터의 크기 때문에 while 루프 내에서 새로운 int [] 항목을 선언하려고하면 프로그램이 메모리가 부족합니다. ' –

+0

Map 를 사용하여 문서를 추가 할 수 있습니다. ID가 고유하다고 가정합니다. 이 경우에도 실패하면 더 많은 메모리를 할당하십시오. – JHS

+0

지도 솔루션이 그에게 적합한 지 여부를 확인해야합니다. –

2

당신은

가 어떤 바이트 또는 짧은에 대한 int를, 할 필요가 않습니다

while 루프에 int[] entry = new int[2];을 넣어 있나요? 이것이 가능하지 않다면 동일한 배열 인스턴스를 사용하여 배열을 저장할 방법이 없기 때문에 프로그램을 다시 고려해야합니다. - Neil Locketz 1 분 전 편집

+0

'while 루프 내에서 새로운 int [] 항목을 선언하려고하면 데이터의 크기로 인해 프로그램이 메모리가 부족합니다. ' –

+0

int가 될 필요가 있습니다. byte 또는 short는 어떨까요? 이것이 가능하지 않다면 동일한 배열 인스턴스를 사용하여 배열을 저장할 방법이 없기 때문에 프로그램을 다시 고려해야합니다. –

+0

OP가 대답해야합니다. 반복마다 새로운 객체를 사용하지 않고 배열을 저장할 방법이 없다는 것에 동의합니다 –

관련 문제