Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.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 为什么要费心编写这样的迭代器呢?_Java - Fatal编程技术网

Java 为什么要费心编写这样的迭代器呢?

Java 为什么要费心编写这样的迭代器呢?,java,Java,我正在阅读关于内部类的Java教程 它解释了在示例“InnerEvenIterator内部类,类似于标准Java迭代器”中,我认为迭代器在Java中非常常见 我有C编程的背景。我不明白为什么这样一个简单的循环 for(i=0;i <SIZE;i+2){ System.System.out.println(arrayOfInts[i])); } for(i=0;i这是内部类的说明,而不是迭代器最合适的使用示例 接下来,您会抱怨“hello world”程序没有做任何有用的事情!这是内部类

我正在阅读关于内部类的Java教程

它解释了在示例“InnerEvenIterator内部类,类似于标准Java迭代器”中,我认为迭代器在Java中非常常见

我有C编程的背景。我不明白为什么这样一个简单的循环

for(i=0;i <SIZE;i+2){
System.System.out.println(arrayOfInts[i]));
}

for(i=0;i这是内部类的说明,而不是迭代器最合适的使用示例


接下来,您会抱怨“hello world”程序没有做任何有用的事情!

这是内部类的说明,而不是迭代器最合适的使用示例


接下来你会抱怨“hello world”程序没有做任何有用的事情!

迭代器是一种抽象。抽象通常很好

一件好事(大事?)迭代器得到的是以统一的方式检查不同数据结构的能力,即使数据结构不能用整数索引。例如,在C++中,可以使用迭代器来运行数组、集合、向量和映射,甚至是您自己的数据结构,所有这些都是概念上的和语法上一致的。即使映射恰好是从字符串到小部件


使用C++方法,使用迭代器至少可以和使用任何其他访问机制一样高效。java有不同的优先级。史蒂芬是正确的,java教程中的代码示例可能不是为什么你想要拥有或使用迭代器的一个很好的例子。

迭代器是抽象的。抽象通常是好的。

一件好事(大事?)迭代器得到的是以统一的方式检查不同数据结构的能力,即使数据结构不能用整数索引。例如,在C++中,可以使用迭代器来运行数组、集合、向量和映射,甚至是您自己的数据结构,所有这些都是概念上的和语法上一致的。即使映射恰好是从字符串到小部件


使用C++方法,使用迭代器至少可以和使用任何其他访问机制一样高效。java有不同的优先级。史蒂芬是正确的,java教程中的代码示例可能不是为什么你想要拥有或使用迭代器的一个很好的例子。

< P>我同意史蒂芬C,这是一个I的说明。nner类。我想指出,从C到Java,您可能会注意到更多面向对象的东西。根据您对OO范式的熟悉程度,与您习惯的函数式编程风格相比,有些可能看起来相当陌生

内部类只是将类似于iterator的东西转换为表示迭代器的对象的另一个例子。通过这样做,我们获得了对面向对象编程至关重要的抽象层

顺便说一句:欢迎来到Java

干杯


Mike

我同意Stephen C的观点,这是一个内部类的说明。我想指出,从C开始使用Java时,您可能会注意到更多面向对象的东西。根据您对OO范式的熟悉程度,与您习惯的函数式编程风格相比,有些可能看起来非常陌生

内部类只是将类似于iterator的东西转换为表示迭代器的对象的另一个例子。通过这样做,我们获得了对面向对象编程至关重要的抽象层

顺便说一句:欢迎来到Java

干杯


Mike

对于数组上的简单循环,您(通常)不会在Java中使用迭代器

for(int i=0;i < arrayOfInts.length ; i+2){
     System.out.println(arrayOfInts[i]));
}
如果我要实现一个“偶数步进迭代器”,我会将它建立在普通迭代器的基础上,这样它就可以用于任何类型的iterable

public class EvenSteppingIterator<X> implements Iterator<X>{

      private final Iterator<X> source;

      public EvenSteppingIterator(Iterator<X> source){
          this.source = source;
          // skip the first one, start from the second
          if (source.hasNext()) source.next();
      }

      public boolean hasNext() {
          return source.hasNext();
      }

      public X next(){
          X n = source.next();
          // skip the next one
          if (source.hasNext()) source.next();
          return n;
      }


}
public类EvenSteppingIterator实现迭代器{
私有最终迭代器源;
公共EvenSteppingIterator(迭代器源){
this.source=源;
//跳过第一个,从第二个开始
if(source.hasNext())source.next();
}
公共布尔hasNext(){
返回source.hasNext();
}
公共X下一步(){
xn=source.next();
//跳过下一个
if(source.hasNext())source.next();
返回n;
}
}

对于数组上的简单循环,您(通常)不会在Java中使用迭代器

for(int i=0;i < arrayOfInts.length ; i+2){
     System.out.println(arrayOfInts[i]));
}
如果我要实现一个“偶数步进迭代器”,我会将它建立在普通迭代器的基础上,这样它就可以用于任何类型的iterable

public class EvenSteppingIterator<X> implements Iterator<X>{

      private final Iterator<X> source;

      public EvenSteppingIterator(Iterator<X> source){
          this.source = source;
          // skip the first one, start from the second
          if (source.hasNext()) source.next();
      }

      public boolean hasNext() {
          return source.hasNext();
      }

      public X next(){
          X n = source.next();
          // skip the next one
          if (source.hasNext()) source.next();
          return n;
      }


}
public类EvenSteppingIterator实现迭代器{
私有最终迭代器源;
公共EvenSteppingIterator(迭代器源){
this.source=源;
//跳过第一个,从第二个开始
if(source.hasNext())source.next();
}
公共布尔hasNext(){
返回source.hasNext();
}
公共X下一步(){
xn=source.next();
//跳过下一个
if(source.hasNext())source.next();
返回n;
}
}

我不认为我会在链接示例中概述的情况下使用内部类。 正如您所提到的,对于这个示例,带有for循环的C风格代码更好。 但我认为,由于本教程的目的是教育学习者如何使用 这个例子有助于理解内部类的概念 虽然它的实际用途看起来并不相关

正如本教程所提到的,内部类在事件处理部分非常有用 在GUI编程中。对于事件处理,您可以将内部类的实例注册为 将调用其方法的EventHandler(用于GUI中的操作按钮) 在按钮上执行操作时。(说按钮已单击)(回调机制)。 内部类可以访问封闭类的私有成员,如果事件 处理代码i