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

时间:2021-01-09 07:18:50

I have a linked list and I need to make method that returns an iterator at a given point in the list. I currently have an iterator that starts at the head:

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

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

All I have for the other one is:

我所拥有的另一个是:

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

I'm not sure how to go about utilizing the given position(x) that won't affect my ListIterator constructor which starts at head.

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

I tried using a for loop to get to "x" but realized that wouldn't tell the iterator to start there, so I'm quite stumped.

我尝试使用for循环来获取“x”,但意识到这不会告诉迭代器从那里开始,所以我很难过。

Edit:

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

3 个解决方案

#1


Without seeing your implementation, the trivial way to do this is:

在没有看到您的实现的情况下,执行此操作的简单方法是:

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;
}

Otherwise, you could traverse the list to the xth node, but there's no reason you can't do it this way.

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

#2


Simply use the listIterator(index); method from List, in which index is an int resembling the starting index. Edit: in your case it would be

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

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

#3


So I ended up going with this.

所以我最终选择了这个。

public Iterator<E> iterator(int x){

    Iterator<E> it = new ListIterator();

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

Given more range I might have added a constructor but without being able to change much this worked the best.

给定更多范围我可能已经添加了一个构造函数,但是没有能够改变很多,这是最好的。

#1


Without seeing your implementation, the trivial way to do this is:

在没有看到您的实现的情况下,执行此操作的简单方法是:

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;
}

Otherwise, you could traverse the list to the xth node, but there's no reason you can't do it this way.

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

#2


Simply use the listIterator(index); method from List, in which index is an int resembling the starting index. Edit: in your case it would be

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

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

#3


So I ended up going with this.

所以我最终选择了这个。

public Iterator<E> iterator(int x){

    Iterator<E> it = new ListIterator();

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

Given more range I might have added a constructor but without being able to change much this worked the best.

给定更多范围我可能已经添加了一个构造函数,但是没有能够改变很多,这是最好的。