Java遍历方法

Java中有几种我们常用的遍历数组或集合的方式,下面我来给大家简要总结一下这些遍历方式的各自的使用场景。

一、for循环

for循环的循环条件中定义了一个int类型的局部变量(变量名通常是i)。由于数组(Array)的元素可以通过角标访问,我们如果在循环体里得到了数组的角标,就可以对数组的一个或多个元素进行自定义的逻辑操作。同样的,对于有序集合(List),例如ArrayList、LinkedList,它们所存储的每个元素都拥有角标(Index),所以,for循环语句在处理有序集合时,也是得心应手的。

下面是一个关于for循环的小例子:

import java.util.ArrayList;
import java.util.Iterator;

public class Q {
    public static void main(String[] args) {
        ArrayList<String> ls = new ArrayList<String>();

        ls.add("zhangsan");
        ls.add("lisi");
        ls.add("wangwu");

        for (int i = 0; i < ls.size(); i++) {
            String ele = ls.get(i);
            System.out.println(ele);
        }
    }
}

二、Iterator/Enumeration迭代器

迭代器是针对于某个具体的集合对象的,注意是集合,没有针对数组,如果数组想要得到迭代器,就需要使用Arrays.asList(数组对象)来将数组转换为集合来进行迭代操作(Attention:数组转为集合之后,不能进行增改操作)。集合对象通过iterator()方法来得到一个Iterator的实例对象,该实例对象封装了主动调用iterator()方法的集合的每个元素。

具体实现过程:

1、while语句

while语句使我们比较常用的一种通过迭代器遍历集合的方式。示例代码如下:

import java.util.ArrayList;
import java.util.Iterator;

public class Q {
    public static void main(String[] args) {
        ArrayList<String> ls = new ArrayList<String>();

        ls.add("zhangsan");
        ls.add("lisi");
        ls.add("wangwu");

        //获取ls集合对象的迭代器
        Iterator<String> it = ls.iterator();

        /*
         * hasNext()方法返回boolean值,判断是否还有下一个元素;next()方法直接返回下一个集合中的元素。
        */
        while (it.hasNext()) {
            System.out.println(it.next());
        }
    }
}

2、for语句

实现原理与while语句相似,实例代码如下:

import java.util.ArrayList;
import java.util.Iterator;

public class Q {
    public static void main(String[] args) {
        ArrayList<String> ls = new ArrayList<String>();

        ls.add("zhangsan");
        ls.add("lisi");
        ls.add("wangwu");

        for (Iterator it = ls.iterator(); it.hasNext();) {
            String ele = (String) it.next();
            System.out.println(ele);
        }
    }
}

3、Enumeration枚举类型

Enumeration相较Iterator较少使用。主要应用场景包括Vector集合的操作。Vector是ArrayList的线程安全版,但ArrayList比Vector的效率要高。实例代码如下:

import java.util.Enumeration;
import java.util.Vector;

public class Q {
    public static void main(String[] args) {
        Vector<String> v = new Vector<String>();

        v.add("zhangsan");
        v.add("lisi");
        v.add("wangwu");

        Enumeration<String> eles = v.elements();

        while (eles.hasMoreElements()) {
            String ele = eles.nextElement();
            System.out.println(ele);
        }
    }
}

三、foreach循环

Set的集合是不可重复的、无序的,其中无序这个特点,就决定Set集合是无法通过角标(Index)访问具体的某个元素,我们无法通过for循环遍历Set集合,而用迭代器遍历又觉得太麻烦,我们这时就可以使用foreach循环遍历Set集合中的元素。事实上,foreach支持集合、数组。在遍历集合或数组中的元素时,若只需要取出每个元素值,而不需要对这些元素进行附加逻辑操作时,就可以考虑使用foreach循环语句遍历集合、数组中的元素。实例代码如下:

import java.util.HashSet;

public class Q {
    public static void main(String[] args) {
        HashSet<String> hs = new HashSet<String>();

        hs.add("zhangsan");
        hs.add("lisi");
        hs.add("wangwu");

        for (String ele : hs) {
            System.out.println(ele);
        }
    }
}
posted @ 2017-01-25 17:00  晚樨  阅读(499)  评论(0编辑  收藏  举报