Добавление в ListIterator объекта ArrayList

Я пишу программу, которая манипулирует ArrayList с помощью ListIterator без использования каких-либо методов ArrayList. В этом случае ArrayList должен вести себя как набор.

Мой метод add проходит по ArrayList и сравнивает каждый элемент с числом, которое нужно добавить, чтобы избежать повторов. OurSet() является конструктором класса. Я также переопределяю метод toString для печати с использованием методов ListIterator.

Когда я тестировал эти два метода, оказалось, что метод add на самом деле ничего не добавляет (или оператор печати этого не показывает). Вывод с использованием основного метода ниже пуст, и я не совсем понимаю, почему. Я проследил код несколько раз и поместил операторы печати в методы, чтобы убедиться, что они выполняются в каждой строке. В методе toString он никогда не входит в цикл while. Код ниже, и любая помощь приветствуется!

OurSet()
{
//      list is the ArrayList object, it was defined earlier and now instantiated
    list = new ArrayList();
//      iter is the ListIterator object, it was defined earlier and now instantiated
    iter = list.listIterator();
}

public void add(int x)
{
    while(iter.hasNext())
    {
        int item = (Integer) iter.next();
        if(item == x)
            break;
    }
    iter.add(new Integer(x));
}

public String toString()
{
    String set = "";
    while(iter.hasNext())
    {
        int item = (Integer) iter.next();
        set += item + " ";
    }
    return set;
}

Вот мой основной метод.

public static void main(String args[])
{
    OurSet set = new OurSet();
    set.add(50);
    System.out.println(set);
}

person Jon Snow    schedule 08.12.2015    source источник
comment
Нестандартно, но: set += item + " "; избегайте конкатенации строк в цикле. Вместо этого используйте StringBuilder и его метод append. Пример: stackoverflow.com/a/1532483/1393766, вопрос на эту тему: stackoverflow.com/ вопросы/14927630/   -  person Pshemo    schedule 08.12.2015


Ответы (1)


Создание экземпляра объекта IteratorList заставит его начать с самого начала. Поскольку единственный раз, когда я создавал экземпляр объекта, он был в конструкторе, он уже достиг конца списка в методе add, и метод toString не мог пройти его снова. При повторном создании экземпляра iter в методе toString список был распечатан правильно.

person Jon Snow    schedule 08.12.2015