2011-11-30 2 views
0

인터페이스는 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를 구현하지 않아야합니다. 또한, 반복자 메소드의 구현은 어디에 있습니까?

어쩌면 혼란 스럽지만 친절하게 도와주세요! 덕분에 .

+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(); 

하지만, ComparableTestIterator<E>을 구현하는 데 필요하지 않습니다 - 왜 것? Iterator 인터페이스를 사용하지만 을 구현하지 않습니다.

+0

이제 iterator는 인터페이스 일뿐입니다.하지만 내 목록에서 어떻게 반복하는지 ... 즉 반복자의 모든 메소드 구현이 어디에 있습니까? – Kraken

+0

@Karan :'ArrayList'는 당신을 위해 그것을 처리합니다. 호출자가 아닌 반복자를 어떻게 결정할지는 콜렉션에 달려 있습니다. 호출자는 사용자가 해당 작업을 수행 할 때까지 호출자에게 달려 있습니다. (Btw, 이것들은 모두 제네릭 형식입니다. "원시"형식을 사용하는 대신 이러한 방식으로 사용해야합니다.) –

+0

ok 인터페이스를 사용하지만 어딘가에 구현이 있어야합니다 .. /? 이 경우에는 어디에 있습니까? – Kraken

1

인터페이스 Iterator은 표준 API 패키지 java.util에 정의되어 있습니다. 코드에 import java.util.*; 줄이 있으므로이 코드를 사용할 수 있습니다.

구현할 필요가 없습니다. 메소드 ArrayList.iterator()가 돌려주는 ArrayList의 내부 클래스에 의해 구현됩니다.

표준 API의 소스 코드를 보면 src.zip 파일에 JDK와 함께 제공되는 표준 API의 소스 코드를 볼 수 있습니다.

0

물론 이미 정의되어 있습니다. 패키지 java.util에 내장 된 인터페이스이며 java.util.Iterator처럼 가져와야합니다.

0

이전 게시물에 추가하면 Iterator를 사용할 필요가 없습니다 (현재 컨텍스트에서).대신, java의 "enhanced for loop"를 시도해야합니다 :

for(BOX temp: box){ 
    //do something... 
} 
관련 문제