`
原来我就是麦兜
  • 浏览: 9745 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

[Java5新特性]加强For循环

 
阅读更多

替换迭代器

我们先来回忆一下Java中的迭代器的用法,可以使用迭代器的有List和Set集合。原因在于它们都实现了Collection接口,而Collection接口拥有一个叫做Iterable父接口。下面我们来看一个案例:

public class Demo {
    @Test
    public void demo() {
        List<String> list = new ArrayList<String>();
        list.add("hello");
        list.add("world");
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {
            String string = iterator.next();
            System.out.println(string);
        }
    }
}

在Java 5版本后,提供了加强For循环来替代原本的迭代器。我们来看以下代码:

public class Demo {
    @Test
    public void demo() {
        List<String> list = new ArrayList<String>();
        list.add("hello");
        list.add("world");
        for (String string : list) {
            System.out.println(string);
        }
    }
}

通过以上两段代码,我们可以看出,输出结果是完全一样。但是,在写法上,加强For循环更加简洁。

加强For作用

在实际使用中,加强For循环都有哪些作用呢?我们分别来讨论一下。

  • 第一种用法:可以用于循环实现Iterable接口的所有集合,例如上面的案例:
public class Demo {
    @Test
    public void demo() {
        List<String> list = new ArrayList<String>();
        list.add("hello");
        list.add("world");
        for (String string : list) {
            System.out.println(string);
        }
}}
  • 第二种用法:可以用于循环数组。
public class Demo {
    @Test
    public void demo3() {
        String[] arr = { "hello", "world" };
        for (String string : arr) {
            System.out.println(string);
        }
    }
}

需要注意的问题

掌握了加强For循环的用法,下面我们就来思考一下,加强For循环在实际运用中,有哪些需要注意的问题呢?

  • 利用加强For循环遍历数组或集合时,只能从头到尾,不能遍历部分内容。
  • 利用加强For循环遍历数组或集合时,不能获取当前元素的索引值。
  • 加强For循环只是迭代器的一种替换方式。

深入加强For

既然加强For循环可以遍历所有实现Iterable接口的集合,那我们可以不可以自定义一个实现Iterable接口的集合,再利用加强For来遍历呢?
下面我们就自定义一个实现Iterable接口的集合类:

public class Word implements Iterable {
    private String[] words;
    public Word(String s) {
        words = s.split("\\s+");
    }
    @Override
    public Iterator iterator() {
        return new Iterator() {
            private int index = 0;
            public boolean hasNext() {
                return index < words.length;
            }
            public Object next() {
                return words[index++];
            }
            public void remove() {}
        };
    }
}

然后,我们进行测试:

public class Demo {
    @Test
    public void demo4() {
        Word word = new Word(
                "hello world javaWeb     css html   el   jstl  jsp    servlet response");
        for (Object obj : word) {
            System.out.println(obj);
        }
    }
}

转载说明:请注明作者及原文链接,谢谢!

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>
分享到:
评论

相关推荐

    JDK1.5中增强for循环

    JDK1.5新特性中的最重要的一点。让你彻底明白增强for循环的强大和方便

    JAVA5新特性介绍.zip

    JDK1.5新特性:自动拆装箱、泛型、增强for循环、静态方法导入、可变参数、枚举

    Java理论与实践:在JDK早期版本中使用Java 5的语言特性

    本文介绍了Java 5中添加的语言特性--泛型、枚举、注释、自动装箱和增强的for循环--不需要修改JVM的指令集,几乎全部是在静态编译器和类库中实现的。对于不能使用Java 5语言特性的开发人员,有多种方法可以使他们使用...

    JAVA jdk1.5的新特性

    1.增强的for循环【foreach{}迭代数组或集合】 格式:for(变量的类型 变量名:集合变量名 ){} 注意:集合变量可以是数组或实现了Iterable接口的集合类 2.静态导入(这样调用一个静态方法的时候就不需要【类名....

    Java 高级特性.doc

    2.可变参数与for循环增强 这个是一般的用法: public static void loop(String[] args){ for(int i=0;i;i++) { System.out.println(args[i]); } } 这个是JDK 增加的新特性的用法! public static void loop(int ...

    jdk1.5的新特性

    从增强的for循环到诸如泛型(generic)之类更复杂的特性,都将很快出现在您所编写的代码中。我们刚刚完成了一个基于Java 5.0的大型任务,而本文就是要介绍我们使用这些新特性的体验。本文不是一篇入门性的文章,而是对...

    Java基础知识点总结.docx

    增强for循环 85 可变参数(...) 86 枚举:关键字 enum 86 自动拆装箱 86 泛型 87 &lt;java.lang&gt;System 89 &lt;java.lang&gt;Runtime 90 &lt;java.lang&gt;Math 90 &lt;java.lang&gt;.Date:日期类,月份从0—11 92 &lt;java.lang&gt; Calendar...

    JAVA基础课程讲义

    增强for循环 114 思考作业 114 上机作业 115 第六章 常用类的使用 117 基本数据类型的包装类 117 包装类基本知识 117 包装类的用途 118 自动装箱和拆箱?autoboxing,unboxing 119 字符串相关类(String、 ...

    java基础案例与开发详解案例源码全

    4.5 增强for循环116 4.6 本章练习117 第5章 5.1 面向过程的设计思想120 5.2 面向对象的设计思想120 5.3 抽象121 5.3.1 对象的理解121 5.3.2 Java抽象思想的实现122 5.4 封装124 5.4.1 对象封装的概念理解124 5.4.2 ...

    java学习笔记 初学者必读

    17.2. 增强的for循环 17-66 17.3. 自动装箱和自动拆箱 17-69 17.3.1. 在基本数据类型和封装类之间的自动转换 17-69 17.4. 类型安全的枚举 17-70 17.5. 静态引入 17-71 17.6. C风格的格式化输出 17-72 17.7. Building...

    corejava培训文档

    17.2. 增强的for循环 17.3. 自动装箱和自动拆箱 17.3.1. 在基本数据类型和封装类之间的自动转换 17.4. 类型安全的枚举 17.5. 静态引入 17.6. C风格的格式化输出 17.7. Building Strings(StringBuilder类) 17.8....

    Java典型模块

    3.1.3 增强版for循环 3.1.4 基本数据的拆、装箱操作(autoboxing和unboxing) 3.2 枚举 3.2.1 枚举的实现原理 3.2.2 枚举的简单应用 3.2.3 枚举的高级特性 3.3 反射 3.3.1 反射的基石——Class类 3.3.2 反射的基本...

    java高级编程必须知道的集合详细讲解

    集合框架的迭代和遍历: 解释如何使用迭代器和增强 for 循环来遍历集合中的元素。讲解如何避免在遍历过程中发生并发修改异常。 集合框架的性能和选择: 探讨集合框架中各种实现类的性能比较,讲解如何根据需求选择...

    仿知乎java源码-Java2Cpp-Translator:Java到C++转换器

    仿知乎java源码SevenBobcat-Java2CppTranslator 翻译器支持将受限版本的 Java 翻译成 C++。 源语言是 Java 的受限版本,没有高级功能,如嵌套类、匿名类、接口、枚举、注释、泛型、增强的 for 循环、可变参数、装箱/...

    corejavaNoteBook

    17.2. 增强的for循环 17-66 17.3. 自动装箱和自动拆箱 17-69 17.3.1. 在基本数据类型和封装类之间的自动转换 17-69 17.4. 类型安全的枚举 17-70 17.5. 静态引入 17-71 17.6. C风格的格式化输出 17-72 17.7. Building...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例034 使用for循环输出杨辉三角 43 实例035 使用嵌套循环在控制台上输出 九九乘法表 44 实例036 用while循环计算1+1/2!+1/3!…1/20! 45 实例037 for循环输出空心的菱形 46 实例038 foreach循环优于for循环 47 实例...

Global site tag (gtag.js) - Google Analytics