Java集合遍历

Java集合遍历教程

List 集合Set 集合 里面,我们讲了怎么往集合里面添加数据,但是怎么样将集合里面的数据遍历出来呢?我们可以通过以下方法。

Java Iterator方式遍历

说明

Iterator 是专门的迭代输出接口,将集合里面的元素一个一个的遍历,然后判断,如果有内容就将其内容取出,一直到结尾。Iterator 是一个接口,常用方法有:

常用方法

方法名 描述
boolean hasNext(); 判断是否有下个值
E next(); 取出下个元素的内容
void remove() 删除当前元素

案例

package com.haicoder.net.collection; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class ArrayListTest { public static void main(String[] args) { System.out.println("嗨客网(www.haicoder.net)"); //定义一个 ArrayList 对象 List<String> strArrayList = new ArrayList(); //添加元素操作 strArrayList.add("嗨客网"); strArrayList.add("你好啊"); strArrayList.add(1, "愿你存活100年"); System.out.println("集合初始数据:" + strArrayList); Iterator<String> iterator = strArrayList.iterator(); while (iterator.hasNext()) { String value = iterator.next(); if (value.equals("愿你存活100年")) { System.out.println("移除元素"); iterator.remove(); } else { System.out.println("元素的值为:" + value); } } System.out.println("遍历集合并且移除数据后的结合数据:" + strArrayList); } }

运行结果如下:

07 iterator遍历.png

我们使用了 ArrayList 集合 的 iterator() 方法,得到了一个 Iterator 对象,然后通过 next 方法来访问每次当前的元素。同时,它的指向元素的位置会向后移动。

我们在学习 list 的时候,知道 list 里面有 remove 方法,这个方法在正式的编程环境中,建议开发者慎用,使用 list 的 remove 方法,会将 list 对象的结构改变,它会让数组的长度减少,操作不当,很容易引起 异常。 建议使用 iterator 的 remove 方法。

迭代输出如下图:

08 迭代输出.png

Java ListIterator方式遍历

说明

与 Iterator 不同的是 ListIterator 可以实现从后向前或者由前向后双向输出。但是双输出只能够 List 的类才能够使用。常用的方法有:

常用方法

方法名 描述
boolean hasNext(); 判断是否有下个值
E next(); 获取下一个元素
void remove(); 移除当前元素
void add(E e); 在集合里面添加元素
boolean hasPrevious(); 判断是否有上一个元素
E previous(); 获取前一个元素
int nextIndex(); 返回下一个元素的索引号
int previousIndex(); 返回上一个元素的索引号
void set(E e); 替换元素

案例

package com.haicoder.net.collection; import java.util.ArrayList; import java.util.List; import java.util.ListIterator; public class ArrayListTest { public static void main(String[] args) { System.out.println("嗨客网(www.haicoder.net)"); //定义一个 ArrayList 对象 List<String> strArrayList = new ArrayList(); //添加元素操作 strArrayList.add("嗨客网"); strArrayList.add("你好啊"); strArrayList.add(1, "愿你存活100年"); ListIterator<String> allIterators = strArrayList.listIterator(); allIterators.add("添加的元素"); System.out.println("集合最终数据:" + strArrayList); //添加元素 System.out.println("由前向后输出:"); while (allIterators.hasNext()) { String tmpStr = allIterators.next(); System.out.println(tmpStr); } //因为前面执行了从前往后遍历,所以这边的索引会在最后一个元素上面,执行向前遍历的时候,能够由数据 System.out.println("由后向前输出:"); while (allIterators.hasPrevious()) { String tmpStr = allIterators.previous(); System.out.println(tmpStr); } } }

运行结果如下:

10 listIterator.png

首先我从前往后遍历,然后再从后往前遍历的时候,可以获取到数据,但一开始就从后往前遍历,那么肯定是没数据的。ListIterator 只适合用于 List 集合。

foreach方式遍历

说明

我们可以通过 for 循环,从头地址开始往最后遍历。定义一个变量和集合的大小进行比较。Java 这边也支持通过 foreach 方式对 for 增强对集合输出。

for增强语法

for(类 对象 : 集合){}

描述

关键字 描述
for 循环遍历的开始
和集合里面的类一样,或者是集合里面的类的父类
对象 前面的类声明的一个对象
集合 我们需要遍历对集合

案例

package com.haicoder.net.collection; import java.util.ArrayList; import java.util.List; public class ArrayListTest { public static void main(String[] args) { System.out.println("嗨客网(www.haicoder.net)"); //定义一个 ArrayList 对象 List<String> strArrayList = new ArrayList(); //添加元素操作 strArrayList.add("嗨客网"); strArrayList.add("你好啊"); strArrayList.add(1, "愿你存活100年"); System.out.println("集合初始数据:" + strArrayList); //普通遍历 for (int i = 0; i < strArrayList.size(); i++) { System.out.println("位置 " + i + " 元素内容:" + strArrayList.get(i)); } //for 增强遍历 for (String tmpStr : strArrayList) { System.out.println("for 增强遍历:" + tmpStr); } } }

运行结果如下

09 for 增强输出.png

我们使用了 for 的普通遍历输出和 for 增强输出,发现效果是一样的。for 增强简化了代码,方便的操作。

Java集合遍历总结

集合遍历有 Iterator 遍历,ListIterator 遍历和 for 遍历以及 for 增强遍历。主要的推崇的还是使用 Iterator 遍历,这样的话,对集合进行删除,添加等操作不会出现问题,但是使用 for 或者 for 增强遍历,进行增删操作等时候,会引起一些问题。这边读者在使用的时候需要注意。