我有一個方法,它作爲參數具有集合的迭代器。在我想要複製集合的方法中,迭代器「指向」。 但是隻有最後一個收集條目出現在收集副本中,它存在N次,其中N是原始收集的大小。Java:使用迭代器複製集合
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
}
的Exemplar 「原始集合」:
1
2
3
的Exemplar 「centralNodeNeighbourhood集」:
3
3
3
有人點我到我的錯誤?我不能改變方法的參數,我只把Iterator拿到集合中,對此無能爲力。
UPDATE(回答一些問題)
while (values.hasNext()) {
Node tmp = values.next();
System.out.print("Adding = "+tmp.toString());
centralNodeNeighbourhood.add(tmp);
}
打印正確的原始集合的元素。 我不知道原始集合是什麼類型,但迭代器來自std java。該方法是從OLD Hadoop的API(Hadoop的版本0.20.203.0)的
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 {...}
}
方法
解決 我在每次迭代由TMP對象的副本,並且我此副本添加到centralNodeNeighbourhood集合。這解決了我的問題。 Thx爲您的所有(快速)幫助。
如果您在此循環中轉儲'tmp',是否顯示您期望的內容? –
給定的迭代器如何操作是針對提供它的類的實現特定的;因此,爲您提供迭代器的類可能在其設計中存在錯誤。這個集合是你給它的標準java庫的一部分,還是用戶製作的? – djhaskin987
測試您是否使用==運算符獲得相同的實例。告訴我們測試的結果。 – Puce