zoukankan      html  css  js  c++  java
  • [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);
            }
        }
    }
    

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

  • 相关阅读:
    npm教程2
    02.RIP——CCNP学习笔记
    01.静态路由——CCNP学习笔记
    The 10th SWJTU ACM Online Tutorial
    visual studio 2005 常用按键
    Python垃圾回收机制
    私人网盘系统2.0—全部升级为layUI+PHP(持续更新中)
    Layui框架+PHP打造个人简易版网盘系统
    翻译app的开发全过程---编码+打包+上架
    值得认真学习的6 个 JavaScript 框架
  • 原文地址:https://www.cnblogs.com/longestory/p/4566986.html
Copyright © 2011-2022 走看看