如果在整数列表上有一个迭代器,如何在偶数上返回迭代器?

时间:2012-03-28 00:51:03

标签: java iterator

我在java采访中被问到这个问题。我给了一个整数列表的迭代器。我需要编写一个函数,返回将此迭代器作为参数,并仅返回偶数的迭代器。有人告诉我,我不能修改原始的数字列表。因此,从列表中删除奇数不是解决方案。请指教。感谢。

2 个答案:

答案 0 :(得分:10)

嗯,基本上你只需要创建一个新的Iterator,它接受一个现有的Iterator并覆盖它的hasNext和下一个方法。唯一的困难是一个好的行为迭代器显然应该只占用O(1)空间,因此创建一个新的列表并使用它是糟糕的风格 - 因此我们需要一点簿记。类似下面的内容 - 没有错误处理的简化伪代码,假设null为无效值等等,但是对于一些通用的解决方案 - 应该给你基本的想法:

Iterator<T> it;
T next;

NewIterator(Iterator<T> it) {
    this.it = it;
    setNext();
}

void setNext() {
    while (it.hasNext()) {
        T val = it.next();
        if (validT(val)) {
            next = val;
            return;
        }
    }
    next = null; // lets assume null is invalid.
}

boolean hasNext() {
    return next != null;
}

T next() {
   T ret = next;
   setNext();
   return ret;
}

答案 1 :(得分:0)

Iterator<Integer> itr;
int cur;

OddIterator(Iterator<Integer> itr) {
    this.itr = itr;
    cur = 0;
}

public boolean hasNext() {
    if ((cur & 1) == 1) {
        return true;
    }
    while (itr != null && itr.hasNext()) {
        cur = itr.next();
        if ((cur & 1) == 1) {
            return true;
        }
    }
    return false;
}

public int next() {
    if (!hasNext()) {
        throw new NoSuchElementException();
    }
    int tmp = cur;
    cur = 0;
    return tmp;
}

我希望这会对你有所帮助。如果我的代码存在任何错误。请告诉我。