在 List 集合 和 Set 集合 里面,我们讲了怎么往集合里面添加数据,但是怎么样将集合里面的数据遍历出来呢?我们可以通过以下方法。
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);
}
}
运行结果如下:
我们使用了 ArrayList 集合 的 iterator() 方法,得到了一个 Iterator 对象,然后通过 next 方法来访问每次当前的元素。同时,它的指向元素的位置会向后移动。
我们在学习 list 的时候,知道 list 里面有 remove 方法,这个方法在正式的编程环境中,建议开发者慎用,使用 list 的 remove 方法,会将 list 对象的结构改变,它会让数组的长度减少,操作不当,很容易引起 异常。 建议使用 iterator 的 remove 方法。
迭代输出如下图:
与 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);
}
}
}
运行结果如下:
首先我从前往后遍历,然后再从后往前遍历的时候,可以获取到数据,但一开始就从后往前遍历,那么肯定是没数据的。ListIterator 只适合用于 List 集合。
我们可以通过 for 循环,从头地址开始往最后遍历。定义一个变量和集合的大小进行比较。Java 这边也支持通过 foreach 方式对 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);
}
}
}
运行结果如下
我们使用了 for 的普通遍历输出和 for 增强输出,发现效果是一样的。for 增强简化了代码,方便的操作。
集合遍历有 Iterator 遍历,ListIterator 遍历和 for 遍历以及 for 增强遍历。主要的推崇的还是使用 Iterator 遍历,这样的话,对集合进行删除,添加等操作不会出现问题,但是使用 for 或者 for 增强遍历,进行增删操作等时候,会引起一些问题。这边读者在使用的时候需要注意。