如何在给定索引处启动List Iterator?

时间:2015-05-10 00:35:23

标签: java linked-list

我有一个链表,我需要创建一个方法,在列表的给定点返回一个迭代器。我目前有一个从头开始的迭代器:

public Iterator<E> iterator( )
{
    return new ListIterator();
}

我对另一个人的全部是:

public Iterator<E> iterator(int x )
{
    return new ListIterator();
}

我不确定如何利用给定位置(x)不会影响从头开始的ListIterator构造函数。

我尝试使用for循环来到&#34; x&#34;但意识到不会告诉迭代者从那里开始,所以我很难过。

编辑:

public ListIterator()
        {
            current = head; // head in the enclosing list
        }

3 个答案:

答案 0 :(得分:8)

没有看到你的实现,这样做的简单方法是:

public Iterator<E> iterator(int x) {
    if (x < 0 || this.size() < x) {
        throw new IndexOutOfBoundsException();
    }

    Iterator<E> it = new ListIterator();

    for (; x > 0; --x) {
        it.next(); // ignore the first x values
    }
    return it;
}

否则,您可以将列表遍历到第x个节点,但是没有理由不这样做。

答案 1 :(得分:5)

只需使用listIterator(index);中的List方法,其中indexint,类似于起始索引。编辑:在你的情况下它将是

List<...> list = ...;
return list.listIterator(x);

答案 2 :(得分:-1)

所以我最终选择了这个。

public Iterator<E> iterator(int x){

    Iterator<E> it = new ListIterator();

    for (; x > 0; --x){
        it.next(); 
    }
    return it;
}

考虑到更多的范围,我可能已经添加了一个构造函数但是无法改变太多,这是最好的。