Pat*_*t K 2 java iterator iterable linked-list
家庭作业:请指导我帮助指导我,而不发布完整的代码
我的导师让我们实现了LinkedList作为家庭作业.这是类的shell的标题:
public class LinkedList<T> implements Iterable<T>, Iterator<T>
Run Code Online (Sandbox Code Playgroud)
请注意,他正在实现Iterable和Iterator接口.然后我明白我需要在我的类中实现iterator(),hasNext(),next()和remove()方法.令我困惑的是,他没有将Iterator接口所需的方法放在一个单独的内部类中.以下所有方法都在LinkedList类中定义:
/*
* (non-Javadoc)
*
* @see java.lang.Iterable#iterator()
*/
@Override
public Iterator<T> iterator()
{
return null;
}
/*
* (non-Javadoc)
*
* @see java.util.Iterator#hasNext()
*/
@Override
public boolean hasNext()
{
return false;
}
/*
* (non-Javadoc)
*
* @see java.util.Iterator#next()
*/
@Override
public T next()
{
return null;
}
/*
* (non-Javadoc)
*
* @see java.util.Iterator#remove()
*/
@Override
public void remove()
{
}
Run Code Online (Sandbox Code Playgroud)
iterator()方法不应该返回类似于:
public Iterator<T> iterator()
{
return new MyClassIterator(front);
}
Run Code Online (Sandbox Code Playgroud)
凡MyClassIterator()与定义hasNext(),next()和remove()方法.我错过了什么?
这实际上是一个评论,但必须作为答案发布,因为它太长,很难在评论格式中阅读.
有了Iterable实现工具要非常小心Iterator.可以有多个迭代器同时运行同一个迭代器Iterable.这是一个测试程序,用于演示:
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<String> myList = Arrays.asList(new String[] { "aaa", "bbb", "ccc" });
Iterator<String> iter1 = myList.iterator();
System.out.println("iter1: " + iter1.next());
System.out.println("iter1: " + iter1.next());
Iterator<String> iter2 = myList.iterator();
for (String s; iter2.hasNext();) {
s = iter2.next();
System.out.println("iter2: " + s);
}
System.out.println("iter1.hasNext(): " + iter1.hasNext());
System.out.println("iter2.hasNext(): " + iter2.hasNext());
System.out.println("iter1: " + iter1.next());
}
}
Run Code Online (Sandbox Code Playgroud)
它打印:
iter1: aaa
iter1: bbb
iter2: aaa
iter2: bbb
iter2: ccc
iter1.hasNext(): true
iter2.hasNext(): false
iter1: ccc
Run Code Online (Sandbox Code Playgroud)
拥有该Iterable工具的风险Iterator在于,对于两个迭代器,您将最终得到一个迭代器状态,并且前进iter2将会影响iter1.
当然,干净的解决方案是在您的Iterable实现中实现一个私有类Iterator,并为每个iterator()调用创建一个新的实例.iter1并且iter2然后引用不同的对象,并更改的状态iter2不影响iter1.
| 归档时间: |
|
| 查看次数: |
3215 次 |
| 最近记录: |