为了统一访问Java数据结构的元素,Java提供了迭代器Iterator。它不是一个集合,而是一种用于访问集合的方法。迭代器Iterator(实例it)的两个基本操作是next 、hasNext 和 remove。
调用it.next() 会返回迭代器的下一个元素,并且更新迭代器的状态。调用it.hasNext() 用于检测集合中是否还含有元素。调用it.remove()将迭代器返回的元素删除。
16.1 数据迭代
数据列表,有动态数组ArrayList、有链表LinkedList、有HashSet,它们都可通过迭代器Iterator循环获取元素并支持remove()元素。
/*
* 老陈说编程
* Iterator讲解
*/
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.HashSet;
import java.util.Iterator;
public class IteratorIntro {
public static void main(String[] args) {
ArrayList<String> a = new ArrayList<>();
a.add("牛魔王");
a.add("孙悟空");
a.add("猪八戒");
// 获取迭代器
Iterator<String> it = a.iterator();
// 输出集合中的所有元素
while (it.hasNext()) {
System.out.println(it.next());
}
System.out.println("-------------------");
LinkedList<Integer> l = new LinkedList<>();
l.add(100);
l.add(98);
l.add(75);
l.add(59);
l.add(45);
// 获取迭代器
Iterator<Integer> i = l.iterator();
while (i.hasNext()) {
//过滤掉小于60的数据
if (i.next() < 60) {
i.remove();
}
}
System.out.println(l);
System.out.println("-------------------");
HashSet<Double> h = new HashSet<>();
h.add(3.14);
h.add(3.141);
h.add(3.1415);
h.add(3.14159);
// 获取迭代器
Iterator<Double> j = h.iterator();
// 输出集合中的所有元素
while (j.hasNext()) {
System.out.println(j.next());
}
}
}
输出结果
牛魔王
孙悟空
猪八戒
-------------------
[100, 98, 75]
-------------------
3.14
3.14159
3.141
3.1415
16.2 键值迭代
在HashMap中,keySet()方法返回的是集合,所以也可以用迭代器Iterator访问;values访问的也是集合,照样可用Iterator进行访问。
/*
* 老陈说编程
* Iterator讲解
*/
import java.util.HashMap;
import java.util.Iterator;
public class IteratorIntro {
public static void main(String[] args) {
HashMap<Integer, String> grade = new HashMap<Integer, String>();
// 添加键值对
grade.put(1, "1班最棒");
grade.put(2, "2班最胖");
grade.put(3, "3班最浪");
Iterator<Integer> kt = grade.keySet().iterator();
// 输出集合中的所有key
while (kt.hasNext()) {
System.out.println(kt.next());
}
// 输出集合中的所有value
Iterator<String> vt = grade.values().iterator();
while (vt.hasNext()) {
System.out.println(vt.next());
}
}
}
输出结果
1
2
3
1班最棒
2班最胖
3班最浪
好了,有关Java迭代器Iterator内容就这么多了,如果你觉得老陈这样讲还可以的话,你就转发和点赞,你的轻轻一点,就是对老陈继续创作的最大鼓励和支持。
一个当了10年技术总监的老家伙,分享多年的编程经验。想学编程的朋友,可关注今日头条:老陈说编程。我在分享Python,前端、Java和App方面的干货。关注我,没错的。