对于每次迭代,增强的for循环在链表上执行了哪些精确操作?

时间:2012-03-30 04:08:04

标签: java abstract-data-type

for (String msg : messages) {
    System.out.println(msg);
}

假设消息是一个正确初始化的循环,双向链表,没有头或指针(引用)。也就是说,它只有一个当前节点指针。我的问题只是每次迭代的增强for循环是什么。如果有必要,我有一个接口,我可以发布消息的这种特殊类型的ADT。

这是迭代器:

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

答案 0 :(得分:3)

应该做类似

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

答案 1 :(得分:3)

增强的for循环没有什么特别之处。

for (T i : aCollection) {
  doSomething;
}

简单地翻译为

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

如何通过集合进行迭代是迭代器的工作,它与增强的for循环无关。