2015-01-14 3 views
0

루프의 arraylist에 Document 클래스의 객체를 추가하려고합니다. 문제는 모든 시간이 개체 변경, 목록의 prevous 내용값을 기준으로 arraylist에지도를 추가하는 방법

여기에 너무 변경 내 문서 클래스라는 것이다 :

public class Document { 
    public Map<String, Double> tokens; 
    public String category;  
} 

나는 목록 데이터 세트가 있습니다

List<Document> dataset = new ArrayList<Document>(); 

I을 파일의 모든 토큰을 counts라는 맵으로 읽습니다. 다음과 같이하면

doc = new Document(); 
doc.tokens = counts; 
doc.category=sampleCategory; 
dataset.add(doc); 

counts.clear(); 

하지만 새로운 문서를 읽을 때마다 데이터 세트의 내용이 새 문서의 값으로 변경됩니다. 그래서 참조없이 값으로 문서를 추가 할 수 있습니까?

+0

'Document' 개체의 복사본을 만드는 방법을 묻고 있습니까? –

+0

Java에서는 값으로 객체를 전달할 수 없습니다. ** 참조 ** 개체를 값으로 전달합니다. – m0skit0

+0

[Java가 "참조로 전달"인가 "값으로 전달"인가?] (http://stackoverflow.com/questions/40480/is-java-pass-by-reference-orpass) -by-value) – m0skit0

답변

2

동일한 '개수'개체를 모든 문서 인스턴스에 추가하는 것처럼 보입니다. 당신은 카운트sampleCategory마다의 같은 인스턴스를 재사용하는

counts = new HashMap<String, Double> 
+0

고마워, 문제 해결하기 –

0

을하므로, 어떠한 수정 나머지 부분을 수정합니다 대신 counts.clear()의 해당 유형의 새 인스턴스 수를 지정합니다.

매번 새 개체를 만들고 새 문서을 할당해야합니다.

관련 문제