我正在尝试创建hasnext()为迭代器设置next()方法,以便集合的输出为:
"printing","elements","in","order","from","collection"
输入:
[A] - ["printing", "elements", "in"]
[B] - ["order"]
[C] - ["from", "collection"]
目前我的方法看起来像:
public MyIterator(Collection<Collection<Object>> myColl) {
_myColl = myColl;
}
public boolean hasNext() {
if(myColl.next != null)
{
return true
}
return !queue.isEmpty();
}
public Object next() throws java.util.NoSuchElementException {
//Dont really know what to put in here....
}
任何指针都将不胜感激
答案 0 :(得分:0)
最好的方法是在访问下一个时声明一个计数器并递增。在逻辑上,如果我要表达,那将是这样的。
private int counter = 0;
public boolean hasNext(){
counter = counter < collection.size()? counter + 1: counter;// increment
return counter < collection.size();// check and give the appropriate boolean value
}
public T next(){
return collection.get(counter);// to get the counter number of element
}
其中计数器是类中的私有变量, T 是构建集合的对象类型的泛型类型。像
Collection<String>
这个答案都是关于逻辑的。它可能包含也可能不包含确切的代码。
答案 1 :(得分:0)
好吧,我真的不明白你的问题..为什么你不能只使用普通的迭代器?
我将告诉你如何创建一个基本的迭代器,让你了解基本的工作方式,然后调整你的解决方案:
假设我们需要迭代List&lt; T&gt;并且你想创建一个辅助类来完成它。
class ListIterator<T>
您需要两个私人字段
和3个方法+ 1个构造函数
如何查看字段?
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());
}
如果有更多项目可用,则为真,否则为假。
next
返回下一个项目(如果有的话)。可以通过使用我们的hasNext方法进行简化,因此它将是
public T next()
{
if (!hasNext())
throw new NoSuchElementException("no field");
return 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());
}