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);
}
}
}