尝试使用迭代器从我的LinkedList
打印出对象,但第一个对象没有打印出来,所以从第二个对象开始:
Car car1 = new Car("Koenigsegg CCXR Trevita", "BASASS1");
Car car2 = new Car("Lamborghini Veneno", "B1T3M3");
Car car3 = new Car("W Motors Lykan Hypersport", "NUMERO1");
public void addToList() {
availableCarList.add(car1);
availableCarList.add(car2);
availableCarList.add(car3);
System.out.print("Original contents of list: ");
IIterator itr = availableCarList.getIterator();
while(itr.hasNext()) {
Object element = itr.next();
System.out.print(element + " ");
}
System.out.println();
}
结果:
我做错了什么?
在LinkedList类中实现hasNext()和next():
private class Iterator<T> implements IIterator<T>
{
private LinearNode<T> temp;
public Iterator()
{
temp = (LinearNode<T>) front;
}
@Override
public boolean hasNext()
{
return (temp.getNext() != null);
}
@Override
public T next()
{
if (temp == null)
{
throw new IllegalStateException();
}
temp = temp.getNext();
return temp.getElement();
}
}
答案 0 :(得分:2)
首先,您向我们展示的代码表明LinkedList
实际上是您自己的类 ...而不是标准LinkedList
。
使用与标准库类相同(简称)的名称命名类是一个非常糟糕的主意。它让读者感到困惑......如果你在3个多月的时间内查看你的代码,那将包括你自己。
实际问题很可能是您的列表迭代器的实现不正确。在我看来,你正在跳过列表中的第一个元素。
鉴于temp
包含的内容,我认为:
hasNext()
方法应该测试temp
,而不是temp.getNext()
next()
方法应该返回temp.getElement()
,而不是temp.getNext().getElement()