Round-Robin算法的迭代器实现

来源:互联网 发布:零售行业数据 编辑:程序博客网 时间:2024/05/22 07:04
import java.util.*;//实现了迭代器接口public class RockingRobin implements Iterator<Integer> {//集合内迭代器的数量int size;//指针,指向当前迭代器在数组中的位置int cursor;//存放迭代器的数组Iterator<Integer>[] itrs;@SuppressWarnings("unchecked")public RockingRobin(Collection<Iterator<Integer>> collections) {//将装有迭代器的集合转为数组this.itrs = collections.toArray(new Iterator[0]);//迭代器数量this.size = collections.size();}@Overridepublic boolean hasNext() {//遍历数组,只要有一个迭代器没有迭代完,就返回truefor (Iterator<Integer> itr : itrs) {if (itr.hasNext()) {return true;}}return false;}@Overridepublic Integer next() {//如果有元素(迭代器)没有迭代完if (this.hasNext()) {cursor %= size;//如果当前指针指向的迭代器已经迭代完了//就找下一个没有迭代完的迭代器//循环查找while (!itrs[cursor].hasNext()) {cursor++;cursor %= size;}return (Integer) itrs[cursor++].next();} else {//都迭代完了,还调用next方法,直接抛出异常throw new NoSuchElementException();}}public static void main(String[] args) {Collection<Integer> one = Collections.singleton(1);Collection<Integer> two = Arrays.asList(2, 3);Collection<Integer> three = Arrays.asList(4,5,6);Iterator<Integer> itr1 = one.iterator();Iterator<Integer> itr2 = two.iterator();Iterator<Integer> itr3 = three.iterator();RockingRobin robin = new RockingRobin(Arrays.asList(itr1,itr2,itr3));//1,2,4,3,5,6while (robin.hasNext()) {Integer i = robin.next();System.out.println(i);}}}

原创粉丝点击