如何使用Iterator从LinkedList打印第一个对象?

时间:2016-11-17 22:13:48

标签: java eclipse iterator

尝试使用迭代器从我的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();
}

结果:

result

我做错了什么?

在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();
    }   
}

1 个答案:

答案 0 :(得分:2)

首先,您向我们展示的代码表明LinkedList实际上是您自己的类 ...而不是标准LinkedList

使用与标准库类相同(简称)的名称命名类是一个非常糟糕的主意。它让读者感到困惑......如果你在3个多月的时间内查看你的代码,那将包括你自己。

实际问题很可能是您的列表迭代器的实现不正确。在我看来,你正在跳过列表中的第一个元素。

鉴于temp包含的内容,我认为:

  1. hasNext()方法应该测试temp,而不是temp.getNext()
  2. next()方法应该返回temp.getElement(),而不是temp.getNext().getElement()