我有一个方法,它作为参数有一个集合的迭代器。在我要复制集合的方法中,迭代器“指向”。然而,只有最后一个集合条目出现在集合副本中,它存在 N 次,其中 N 是原始集合的大小。
public void someMethod(Iterator<Node> values) {
Vector<Node> centralNodeNeighbourhood = new Vector<Node>();
while (values.hasNext()) {
Node tmp = values.next();
centralNodeNeighbourhood.add(tmp);
}
...
//store the centralNodeNeighbourhood on disk
}
示例“原始集合”:
1
2
3
示例“centralNodeNeighbourhood 集合”:
3
3
3
有人可以指出我的错误吗?我无法更改方法 args,我只能将 Iterator 获取到集合中,对此无能为力。
更新(回答一些问题)
while (values.hasNext()) {
Node tmp = values.next();
System.out.print("Adding = "+tmp.toString());
centralNodeNeighbourhood.add(tmp);
}
打印正确的原始集合元素。我不知道原始集合是什么类型,但 Iterator 来自 std java。方法是
public class GatherNodeNeighboursInfoReducer extends MapReduceBase
implements Reducer<IntWritable, Node, NullWritable, NodeNeighbourhood>{
public void reduce(IntWritable key, Iterator<Node> values,
OutputCollector<NullWritable, NodeNeighbourhood> output, Reporter reporter) throws IOException {...}
}
来自 OLD Hadoop api 的方法(Hadoop 版本 0.20.203.0)
已解决我在每次迭代时制作了 tmp 对象的副本,并将此副本添加到 centralNodeNeighbourhood 集合中。这解决了我的问题。感谢您的所有(快速)帮助。