可以迭代的ArrayList元素发生变化

所以我正在实现mapreduce工作,这意味着我正在处理键值对。

我有变量

Iterable values 

FreqDataWritable是一个包含信息片段的对象,但是现在我只关心它所拥有的一条信息,它是一个由getFilename()访问的String。

我有以下循环:

 ArrayList filenames = new ArrayList(); for(FreqDataWritable i : values) { filenames.add(i.getFilename()); } 

现在,我想要做的就是在数组列表文件名中打印值。

 for(int i = 0; i < filenames.size(); i++) { System.out.println(filenames.get(i)); } 

但是,当我这样做时,文件名中的所有内容都是相同的。 唯一打印出的是多次打印的单个文件名。

我的原始代码比这更复杂,但我简化了它的帮助。 有人知道怎么修这个东西吗?

谢谢

我想到了。 Hadoop有一个奇怪的内存使用,所以当我第一次迭代这些值时,它只是一遍又一遍地向arraylist添加相同的对象。

相反,我需要这样做:

 for(FreqDataWritable i : values) { filenames.add(new String(i.getFilename())); } 
 for(String filename : filenames) { System.out.println(fn); } 

如果这有用,请告诉我?

你尝试过基于迭代器的方法吗?

 Iterator i = values.iterator(); fileNames.add(i.next().getFileName()); for(i; i.hasNext();) { String stringI = i.next().getLast().getFileName(); if(!stringI.equals(fileNames.get(fileNames.size() - 1))) fileNames.add(i.next().getLast().getFileName()); }