【发布时间】:2017-05-15 13:47:26
【问题描述】:
我需要一个可迭代的数据结构,它提供以下可能性 标准的
Iterator<>接口(@987654322@、hasNext()等)。此外,应该可以将迭代器重新定位在 某个位置。
是否有任何类已经提供了上述可能性?
否则我会实现以下内容:
public class PositionableIterator<E> implements Iterator<E> {
private final List<E> delegate;
private Iterator<E> iterator;
public PositionableIterator(List<E> delegate) {
this.delegate = delegate;
this.iterator = delegate.iterator();
}
public void moveTo(int index) {
this.iterator = delegate.listIterator(index);
}
public void moveTo(E element) {
this.iterator = delegate.listIterator(delegate.indexOf(element));
}
@Override
public boolean hasNext() {
return iterator.hasNext();
}
@Override
public E next() {
return iterator.next();
}
}
您认为使用这种方法有什么缺点吗?
【问题讨论】:
-
一个缺点是,如果
List没有随机访问(顺序访问,链表),那么每次调用moveTo时,它都会被解析到第一个索引对象。这对于大型列表来说是昂贵的。moveTo(E element)的成本更高。