Интерфейс Iterator уже определен где-то в Java? - PullRequest
0 голосов
/ 30 ноября 2011

Является ли интерфейс Iterator уже определенным где-то в библиотеке Java (следуйте терминологии). т.е.

Что я спрашиваю, так это, скажем, у меня есть arraylist, теперь я пишу.

Iterator itr= new Iterator();

но я никогда не определяю что-то вроде

public interface Iterator{  // all the methods };

Нужно ли импортировать какой-то пакет, где этот итератор уже определен?

Позвольте мне привести пример:

class BOX implements Comparable {

    private double length;
    private double width;
    private double height;

    BOX(double l, double b, double h) {
        length = l;
        width = b;
        height = h;
    }

    public double getLength() {
        return length;
    }

    public double getWidth() {
        return width;
    }

    public double getHeight() {
        return height;
    }

    public double getArea() {
        return 2 * (length * width + width * height + height * length);
    }

    public double getVolume() {
        return length * width * height;
    }

    public int compareTo(Object other) {
        BOX b1 = (BOX) other;
        if (this.getVolume() > b1.getVolume()) {
            return 1;
        }
        if (this.getVolume() < b1.getVolume()) {
            return -1;
        }
        return 0;
    }

    public String toString() {
        return 
        “Length:
        ”+length +
        ” Width:
        ”+width +
        ” Height:
        ”+height;
    }
} // End of BOX class

А вот и мой тестовый класс.

import java.util.*;

class ComparableTest {

    public static void main(String[] args) {
        ArrayList box = new ArrayList();
        box.add(new BOX(10, 8, 6));
        box.add(new BOX(5, 10, 5));
        box.add(new BOX(8, 8, 8));
        box.add(new BOX(10, 20, 30));
        box.add(new BOX(1, 2, 3));
        Collections.sort(box);
        Iterator itr = ar.iterator();
        while (itr.hasNext()) {
            BOX b = (BOX) itr.next();
            System.out.println(b);
        }
    }
}// End of class

Теперь в классе ComparableTest также не должно быть реализовано interface iterator, я не должен определять interface iterator, который будет содержать все методы. Также где находится реализация методов итератора?

Может быть, я немного запутался, но, пожалуйста, помогите! спасибо.

Ответы [ 4 ]

5 голосов
/ 30 ноября 2011

Я подозреваю, что вы имеете в виду java.util.Iterator<E>.

И нет, вы не пишете:

Iterator itr= new Iterator();

..., которые никогда не могли бы работать, учитываячто это интерфейс.Кроме того, это Iterator, а не iterator, и ваш код должен использовать import, а не Import - в Java учитывается регистр.

Вместо этого вы пишете:

Iterator<Foo> iterator = list.iterator();

Но нет, ComparableTest не нужно реализовывать Iterator<E> - с чего бы это?Он использует интерфейс Iterator, но не реализует его.

1 голос
/ 30 ноября 2011

Интерфейс Iterator определяется в пакете java.util в стандартном API. Вы можете использовать его, потому что в вашем коде есть строка import java.util.*;.

Вам не нужно это реализовывать; он реализуется внутренним классом ArrayList, который возвращает метод ArrayList.iterator().

Подобные вещи можно узнать, посмотрев исходный код стандартного API, который поставляется с вашим JDK в файле src.zip

0 голосов
/ 30 ноября 2011

Добавляя к предыдущим постам, нет необходимости (с учетом текущего контекста) использовать итератор. Вместо этого вы должны попробовать java "улучшенный цикл":

for(BOX temp: box){
    //do something...
}
0 голосов
/ 30 ноября 2011

Конечно это уже определено. Это встроенный интерфейс, который поставляется в пакете java.util, и вам нужно импортировать его как java.util.Iterator.

...