2012-03-30 4 views
3

Angenommen, Nachrichten sind eine ordnungsgemäß initialisierte zirkuläre, doppelt verknüpfte Liste, die keinen Kopf- oder Endzeiger (Referenz) hat. Das heißt, es hat nur einen aktuellen Knotenzeiger. Meine Frage ist einfach, was genau die erweiterte for-Schleife für jede Iteration macht. Wenn nötig, habe ich eine Schnittstelle, die ich für diese spezielle Art von ADT, die Nachrichten sind, veröffentlichen kann. HierWelche genauen Operationen führt eine erweiterte for-Schleife für eine verknüpfte Liste für jede Iteration durch?

ist der Iterator:

import java.util.*; 
public class LinkedCircularSequenceIterator<E> implements Iterator<E> { 
    private DblListnode<E> curr; 
    private int itemsLeft; 

    public LinkedCircularSequenceIterator(DblListnode<E> curr, int numItems) { 
    this.curr = curr; 
    this.itemsLeft = numItems; 
    } 

    public boolean hasNext() { 
    return itemsLeft > 1; 
    } 

    public E next() { 
    if(!hasNext()) { 
     throw new NoSuchElementException(); 
    } 
    curr = curr.getNext(); 
    itemsLeft--; 

    return curr.getPrev().getData(); 
    } 

    public void remove() { 
    throw new UnsupportedOperationException(); 
    } 
} 
+2

Konnten Sie Ihren Code für iterator() veröffentlichen? Ich vermute, dass Sie mit einer Endlosschleife enden werden, es sei denn, Ihr Iterator verfügt über eine spezielle Logik, um eine Schleife zu erkennen. – xxpor

+0

öffentlicher Iterator Iterator() { \t \t Rückgabe neuer LinkedCircularSequenceIterator (curr, numItems); \t} –

+0

@That Ihre benutzerdefinierten Iterator zurückgibt, bin ich ziemlich sicher, dass xxpor den Code für die eigentliche Iterator wollte, das heißt: 'LinkedCircularSequenceIterator ' –

Antwort

3

Es sollte speziell für-Schleife tut nichts, so etwas wie

Iterator<Message> iter = messages.iterator(); 
while (iter.hasNext()){ 
    msg=iter.next().toString(); 
    System.out.println(msg); 
} 
3

Die verbesserte tun. ein

for (T i : aCollection) { 
    doSomething; 
} 

übersetzt einfach zu

for (Iterator<T> itr = aCollection.iterator(); itr.hasNext();) { 
    T i = itr.next(); 
    doSomething; 
} 

Wie es iterieren durch die Sammlung die Arbeit des Iterator ist, und es hat nichts für Schleife mit dem verbesserten zu tun.

Verwandte Themen