java 带索引参数的迭代器

java iterator with index parameter

嗨,LinkedList 的普通迭代器如下所示,但是,我们如何构建一个迭代器,returns 一个从指定索引开始的迭代器?我们如何构建:

public Iterator<E>iterator(int index)???  

谢谢! 普通迭代器:

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

private class ListIterator implements Iterator<E>
    {
        private Node current;

        public ListIterator()
        {
            current = head; // head in the enclosing list
        }
        public boolean hasNext()
        {
            return current != null;
        }
        public E next()
        {
            E ret = current.item;
            current = current.next;
            return ret;
        }
        public void remove() { /* omitted because optional */ }
    }

好吧,你可以调用普通的 iterator() 方法,然后调用 next() 多次:

public Iterator<E> iterator(int index) {
    Iterator<E> iterator = iterator();
    for (int i = 0; i < index && iterator.hasNext(); i++) {
        iterator.next();
    }
    return iterator;
}

这是如何实现此类 iterator 的启动示例,但也建议创建或扩展适当的 interface 并使此对象实现此 interface 以符合约定。

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class IterableObject {

    private List<String> values = new ArrayList<String>();


    public Iterator<String> getIterator(final int index) {

        Iterator<String> it = new Iterator<String>() {

            private int current = index;

            @Override
            public void remove() {
                // TODO Auto-generated method stub

            }

            @Override
            public String next() {
                String value = values.get(current);
                current++;
                return value;
            }

            @Override
            public boolean hasNext() {
                if(values.size() > current){
                    return true;
                }else{
                    return false;
                }

            }
        };

        return it;
    }

}

更新

根据评论,我为 LinkedList

编写了一个迭代器
public Iterator<String> getIterator(final int index) {


        Iterator<String> it = new Iterator<String>() {

            private Object currentObject = null;

            {
                /*initialize block where we traverse linked list 
                  that it will pointed to object at place index*/
                System.out.println("initialize" + currentWord);
                for(int i = 0; currentObject.next != null && i < index; i++, currentObject = currentObject.next)
                    ;

            } 


            @Override
            public void remove() {
                // TODO Auto-generated method stub

            }

            @Override
            public String next() {
                Object obj = currentObject.next;
                currentObject = currentObject.next;
                return obj;
            }

            @Override
            public boolean hasNext() {
                return currentObject.next != null;

            }
        };

        return it;
    }

因为IteratorAnonymous class的对象我们不能使用constructor但是可以在初始化块中初始化它看这个答案:我们遍历它一次在开头 (对不起 C 风格) 所以它将指向 currentObject。所有剩余代码都是自我解释的。