2011-01-27 4 views
0

자, 이제는이라는 중복이없는 객체 유형의 요소를 포함하는 세트를 구현해야합니다. 즉, 새 요소를 집합의 이전 요소와 비교해야합니다. 세트에는 고유 한 클래스가 있으며 새 요소를 삽입하는 메소드가 있습니다.객체 유형 집합에 대한 반복자 사용?

내 질문은 : 아래에서 작성한 반복기를 사용하여 세트의 모든 항목과 제안 된 요소를 비교하여 어떻게 추가합니까?

class SetIterator implements MyIterator { 
    private ArraySet arr; //ArraySet is the name of the Set class 
    private int n; 

    SetIterator(ArraySet myArraySet) 
    { 
     arr = myArraySet; 
     n = 0; 
    } 

    @Override 
    public boolean hasNext() 
    { 
     return (n <= arr.size()); 
    } 

    @Override 
    public Object next() 
    { 
     if (hasNext()) 
      return arr[n++]; 
    } 
} 

감사!

+0

여기에서 성취하려는 것은 명확하지 않습니다. 이 숙제가 있니? – adrianboimvaser

+0

거기에 많은 버그가 있습니다 - hasNext는 n <... size() 여야하며, 요소가 존재하지 않고 []로 오브젝트를 아래 첨자로 사용할 수 없으면 NoSuchElementException을 던져야합니다. 아마도 .get 메소드. –

+0

예, for 루프 또는 while 루프 대신 iterator를 사용하는 방법에 대한 예제를 원합니다. – Sadiq

답변

1

ArraySet.java에서 이와 같은 것이 필요할 것입니다.

public Iterator iterator() 
{ 
    return new SetIterator(this); 
} 

public boolean add(Object o) 
{ 
    for (Object item : this) 
     if (o.equals(next)) return false; 
    } 
    // add code to put o in the array 
    return true; 
} 

for 루프는 이런 식으로 컴파일러에 의해 번역됩니다 : Set의 구현이 Iterator보다는 더 중복을 보장해서는 안

Iterator it = this.iterator(); 
while (it.hasNext()) 
{ 
    Object item = it.next(); 
    if (o.equals(next)) return false; 
} 
0

.

즉, Set.add() 및 그 생성자를 Collection으로 사용하는 생성자는 중복을 방지해야합니다. Iterator는 hasNext(), next()remove()을 구현합니다.

Iterator이 중복 검사를 처리하면 귀하의 세트는 java.util.Set 계약에 위배됩니다. 또한 Iterator는 "Single Responsibling Principle"을 위반하는 복제 및 통과 확인이라는 두 가지 책임을 수행합니다.

0

예, for 루프 또는 while 루프 대신 iterator를 사용하는 방법에 대한 예제가 필요합니다.

Iterator을 사용하려면 꽤 많은 종류의 루프를 사용해야합니다. 컬렉션 오브젝트 (객체의 예를 들면, 당신의 집합) Iterable 다음 새 for 루프 구문을 사용할 수 있습니다 구현하는 경우

Iterator it = ... // instantiate the iterator 
while (it.hasNext()) { 
    Object obj = it.next(); 
    ... // do something with obj 
} 

, 다음은 기본 패턴이다 예 :

for (Object obj : yourSet) { 
    ... // do something with obj 
} 

은 물론,이 표현하는 다른 방법이 있습니다,하지만 그들은 모든는 반복자에서 개체를 끌어 몇 가지 (어딘가에) 루프를 포함한다.

관련 문제