Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对于每次迭代,增强的for循环在链表上执行哪些确切操作?_Java_Abstract Data Type - Fatal编程技术网

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

Java 对于每次迭代,增强的for循环在链表上执行哪些确切操作?,java,abstract-data-type,Java,Abstract Data Type,假设消息是一个正确初始化的循环双链接列表,没有头指针或尾指针(引用)。也就是说,它只有一个当前节点指针。我的问题只是,增强for循环在每次迭代中到底做了什么。如果有必要,我有一个接口,我可以发布这种特殊类型的ADT,即消息 这是迭代器: for (String msg : messages) { System.out.println(msg); } import java.util.*; 公共类LinkedCircularSequentiator实现迭代器{ 私有DblListnode

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

这是迭代器:

for (String msg : messages) {
    System.out.println(msg);
}
import java.util.*;
公共类LinkedCircularSequentiator实现迭代器{
私有DblListnode curr;
私家车;
公共链接的循环淬灭器(DblListnode curr,int numItems){
this.curr=curr;
this.itemsLeft=numItems;
}
公共布尔hasNext(){
返回itemsLeft>1;
}
公共教育{
如果(!hasNext()){
抛出新的NoTouchElementException();
}
curr=curr.getNext();
itemsLeft--;
返回curr.getPrev().getData();
}
公共空间删除(){
抛出新的UnsupportedOperationException();
}
}

它应该执行以下操作

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();
  }
}
Iterator iter=messages.Iterator();
while(iter.hasNext()){
msg=iter.next().toString();
System.out.println(msg);
}

增强型for循环没有任何特殊功能。 a

简单地翻译成

for (T i : aCollection) {
  doSomething;
}
for(迭代器itr=aCollection.Iterator();itr.hasNext();){
ti=itr.next();
剂量测定法;
}

它如何遍历集合是迭代器的工作,与增强的for循环无关。

能否发布迭代器()的代码?我怀疑你最终会得到一个无限循环,除非你的迭代器有特殊的逻辑来检测循环。public Iterator Iterator(){return new LinkedCircularSequenceIterator(curr,numItems);}@返回你的自定义迭代器,我很确定xxpor想要实际迭代器的代码,也就是说:
LinkedCircularSequentiator
我把实现放在上面,然后我下面的答案就是会发生什么。您对构造函数中int numItems的要求实际上只是说明for-each循环中将有多少个“eaches”。如果它是一个循环列表,您可以指定realNumOfItems*3并获取每个项目3次。
for (T i : aCollection) {
  doSomething;
}
for (Iterator<T> itr = aCollection.iterator(); itr.hasNext(); ) {
  T i = itr.next();
  doSomething;
}