MR中的iterator与ArrayList的iterator区别以及用法

背景:最近在写MR程序时遇到一个奇怪的问题,利用iterator迭代器遍历数据添加到List中时,保存在List中的元素都是最后遍历的数据。

原因:因为MR中的iterator.next()方法返回的是数据的引用,每次向List中添加都是把引用传入而ArrayList中的iterator.next()方法返回的是数据,所以才会导致如上情况。

解决:每次迭代重新创建一个对象加入List中即可。

List源码:

MR中的iterator与ArrayList的iterator区别以及用法

MR中源码:

MR中的iterator与ArrayList的iterator区别以及用法