2011-11-30 59 views
0

接口Iterator是否已經在java庫中的某處定義(介意術語)。 即接口迭代器已經在Java的某個地方定義過了嗎?

我在問的是,說我有一個數據列表,現在我寫了。

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將包含所有的方法。另外,迭代器方法的實現在哪裏?

我也許很困惑,但請幫忙! 謝謝。

+0

java.lang.Iterator的方法由ArrayList類實現。 – hellectronic

回答

5

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

不,你不寫:

Iterator itr= new Iterator(); 

...可能行不通,因爲它是一個接口。此外,它是Iterator,而不是iterator,您的代碼應該使用import,而不是Import - Java區分大小寫。

相反,你寫的:

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

但是,沒有,ComparableTest並不需要實現Iterator<E> - 爲什麼會呢?它使用Iterator接口,但它不是實現它。

+0

現在迭代器只是一個接口,但我的列表如何知道,如何迭代......即,迭代器的所有方法的實現在哪裏? – Kraken

+0

@Karan:'ArrayList'爲你處理 - 由集合決定如何遍歷它,而不是調用者。這取決於呼叫者您做了什麼*。 (順便說一下,這些都是泛型類型 - 你應該使用它們來代替使用「原始」類型。) –

+0

確定它使用接口,但某處的實現必須是../?在這種情況下,在哪裏? – Kraken

1

接口Iterator在標準API中的包java.util中定義。你可以使用它,因爲你的代碼中有import java.util.*;行。

您不必執行它;它由方法ArrayList.iterator()返回的內部類ArrayList實現。

您可以通過查看標準API的源代碼來找到類似的東西,標準API的源代碼隨您的JDK附帶在src.zip文件中。

0

當然它已經被定義。它是一個內置的接口,包含在包java.util中,您需要導入它,如java.util.Iterator

0

添加到以前的帖子中,使用迭代器是不必要的(給定當前上下文)。相反,你應該嘗試java的「增強for循環」:

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