好吧,我真的不明白你的问题..为什么你不能只使用普通的迭代器?
我会告诉你如何创建一个基本的迭代器,让你了解基本的事情是如何工作的,然后调整你的解决方案:
假设我们需要遍历一个 List 并且你想创建一个帮助类来完成它。
class ListIterator<T>
你需要两个私有字段
和 3 个方法 + 1 个构造函数
- hasNext() -> 布尔值,如果有更多要迭代的项目,则返回 true
- next() -> 返回列表中的下一个元素
- reset() -> 重置内部指针
- 构造函数 -> 只需将列表作为参数进行迭代
这些字段看起来如何?
private final List<T> list; // The list where this call will iterate
private int pointer; // The pointer to the next iterable item
正如描述中所说,构造函数将引用列表,所以它只是
public ListIterator(List<T> list)
{
this.list = list;
pointer = 0;
}
保存引用并将指针设置为 0(开始)。
我们来说说方法:
hasNext 应该检查我们当前的指针是否已经达到列表的大小。
所以它只是(pointer != list.size())
public boolean hasNext()
{
return (pointer != list.size());
}
如果有更多项目可用,则为 true,否则为 false。
next 返回下一项(如果有)。可以通过使用我们的 hasNext 方法来简化,所以它将是
public T next()
{
if (!hasNext())
throw new NoSuchElementException("no field");
return list.get(pointer++);
}
注意事项:
- T 是返回值,因为我们的列表是 T 类型
- list.get(pointer++) 我们首先从列表中的位置
pointer 中获取项目,然后我们将指针加1
重置方法只是一个pointer = 0。
public void reset()
{
pointer = 0;
}
如何使用?
像其他迭代器一样,创建一个 ListIterator 类型的新对象并将列表传递给迭代。
List<String> test = new ArrayList<String>();
test.add("Hello");
test.add("World");
test.add("Whatsapp");
ListIterator<String> iterator = new ListIterator<String>(test);
while (iterator.hasNext())
{
System.out.println(iterator.next());
}