Java Iterable-移动到指定位置
我需要一个可移植的数据结构,提供 标准的迭代器接口(Java Iterable-移动到指定位置,java,iterator,Java,Iterator,我需要一个可移植的数据结构,提供 标准的迭代器接口(next(),hasNext(),等等) 此外,应该可以在一个特定的位置重新定位迭代器 一定的位置 有没有已经提供上述可能性的类 否则,我将实现如下内容: public class PositionableIterator<E> implements Iterator<E> { private final List<E> delegate; private Iterator<E>
next()
,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();
}
}
public类positionable迭代器实现迭代器{
非公开最终名单代表;
私有迭代器;
公共位置迭代器(列表委托){
this.delegate=委托;
this.iterator=delegate.iterator();
}
公共无效移动到(整数索引){
this.iterator=delegate.listIterator(索引);
}
公共无效移动到(E元素){
this.iterator=delegate.listIterator(delegate.indexOf(element));
}
@凌驾
公共布尔hasNext(){
返回iterator.hasNext();
}
@凌驾
公共教育{
返回iterator.next();
}
}
您认为使用这种方法有什么缺点吗?我建议将迭代器转换为列表并使用其功能。因为这样更容易理解和维护。这里有一个转换的例子,我建议将迭代器转换为list并使用它的功能。因为这样更容易理解和维护。有一个转换的示例,您可以通过执行以下操作来实现相同的转换:
Iterator<String> iterator = input.iterator();
for (; index > 0; --index) {
iterator.next(); // move the iterator to index
}
Iterator Iterator=input.Iterator();
对于(;索引>0;--索引){
iterator.next();//将迭代器移动到索引
}
您可以通过执行以下操作来实现相同的目的:
Iterator<String> iterator = input.iterator();
for (; index > 0; --index) {
iterator.next(); // move the iterator to index
}
Iterator Iterator=input.Iterator();
对于(;索引>0;--索引){
iterator.next();//将迭代器移动到索引
}
您还可以使用Google guavas方法从Iterable的特定位置获取项目
Iterator<Something> iterator = repo.GetMyIterator();
Something atPos5 = Iterables.get(iterator, 5);
迭代器迭代器=repo.GetMyIterator();
atPos5=Iterables.get(迭代器,5);
您还可以使用Google guavas方法从Iterable的特定位置获取项目
Iterator<Something> iterator = repo.GetMyIterator();
Something atPos5 = Iterables.get(iterator, 5);
迭代器迭代器=repo.GetMyIterator();
atPos5=Iterables.get(迭代器,5);
一个缺点是,如果列表
没有随机访问(顺序访问、链表),那么每次调用moveTo
时,它都会被解析到索引th对象。这对于一个大的列表来说是昂贵的moveTo(E元素)
的成本更高。一个缺点是,如果列表
没有随机访问(顺序访问、链表),那么每次调用moveTo
都会将其解析到索引th对象。这对于一个大的列表来说是昂贵的<代码>移动到(E元素)的成本更高。