接口迭代器已经在Java中定义了什么?

时间:2011-11-30 12:19:38

标签: java interface iterator

接口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 个答案:

答案 0 :(得分:5)

我怀疑你的意思是java.util.Iterator<E>

不,你不写:

Iterator itr= new Iterator();

......这可能永远不会有效,因为它是一个界面。此外,它是Iterator,而不是iterator,您的代码应使用import,而不是Import - Java区分大小写。

相反,你写:

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

但不,ComparableTest不需要实施Iterator<E> - 为什么会这样?它使用 Iterator接口,但它不会实现

答案 1 :(得分:1)

接口Iterator在标准API的包java.util中定义。您可以使用它,因为代码中有import java.util.*;行。

您不必实施它;它由ArrayList的内部类实现,方法ArrayList.iterator()返回。

您可以通过查看标准API的源代码找到类似的内容,该API随JDK文件src.zip一起提供。

答案 2 :(得分:0)

当然,它已经定义了。它是包java.util中的内置接口,您需要像java.util.Iterator一样导入它。

答案 3 :(得分:0)

添加到以前的帖子中,使用Iterator是不必要的(在当前上下文中)。相反,你应该尝试java的“增强for循环”:

for(BOX temp: box){
    //do something...
}