Как использовать arrayList для реализации next() в итераторе

Я пытаюсь реализовать класс итератора для моего бинарного дерева поиска. (точнее, это KD-Tree, но я не думаю, что это сильно изменит ситуацию). Я хочу, чтобы итератор выполнял обход дерева по порядку. У меня есть arrayList, который содержит листовые узлы в этом «упорядоченном» порядке, и я хотел бы, чтобы итератор перебирал эти листовые узлы в этом порядке. Как я могу использовать этот список массивов для реализации метода next()?

Я попытался создать поле int с именем index в классе Iterator. Тогда мой метод next() будет увеличивать индекс на 1 и возвращать arrayList.get(index). Однако, похоже, это не сработало.

Использование arrayList для реализации next() не обязательно, но это кажется самым простым способом. Если есть способ сделать это с помощью arrayList, это было бы предпочтительнее. Это вообще возможно? Если нет, то буду рад любому совету! Спасибо


person jonan    schedule 15.11.2019    source источник
comment
У вас есть ArrayList, содержащий все узлы? Это странно, если предполагается, что структура данных представляет собой двоичное дерево поиска. Не могли бы вы отредактировать вопрос, чтобы включить более подробную информацию о том, что находится в этом ArrayList и в каком порядке?   -  person kaya3    schedule 15.11.2019
comment
ArrayList содержит только конечные узлы, так как в этом случае конечные узлы содержат все важные данные. Затем я хотел бы, чтобы мой итератор мог перебирать эти листовые узлы.   -  person jonan    schedule 15.11.2019
comment
Что значит выполнять обход по порядку только по листовым узлам? Если обрабатываются только листовые узлы, то либо предварительный заказ, либо упорядоченный, либо пост-порядок будут обрабатывать листовые узлы в одном и том же порядке. Случайно ли ArrayList уже содержит узлы в правильном порядке?   -  person kaya3    schedule 15.11.2019
comment
Да, именно поэтому я сделал ArrayList. ArrayList содержит элементы в том порядке, в котором я хочу их перебирать. Поэтому, независимо от порядка, я просто хочу, чтобы мой метод next() следовал порядку моего ArrayList.   -  person jonan    schedule 15.11.2019
comment
Таким образом, вы можете просто написать arrayList.iterator(), чтобы получить итератор.   -  person kaya3    schedule 15.11.2019


Ответы (1)


Вы можете создать итератор для списка, используя метод iterator().


        // Create and populate the list 
        ArrayList<String> list = new ArrayList<>(); 

        list.add("Hello"); 
        list.add("World");

        // Displaying the list 
        System.out.println("The list is: "+ list); 

        // Create an iterator for the list 
        // using iterator() method 
        Iterator<String> iter = list.iterator(); 

        while (iter.hasNext()) { 
            System.out.print(iter.next() + " "); 
        } 

person sovannarith cheav    schedule 15.11.2019