How to have List Iterator start at a given index?

强颜欢笑 提交于 2020-06-17 09:00:27

问题


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.

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.

Edit:

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

回答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.




回答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

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.



来源:https://stackoverflow.com/questions/30146484/how-to-have-list-iterator-start-at-a-given-index

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!