1.Set集合中
Set:通过 iterator()
方法获取迭代器来遍历元素。例如:
Set<String> set = new HashSet<>();
// 添加元素到 Set
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
String element = iterator.next();
// 处理元素的逻辑
}
2.List集合中
List:通过 listIterator()
方法获取迭代器来遍历元素,可以在遍历时进行双向操作(添加、删除等)。例如:
List<Integer> list = new ArrayList<>();
// 添加元素到 List
ListIterator<Integer> iterator = list.listIterator();
while (iterator.hasNext()) {
int element = iterator.next();
// 处理元素的逻辑
}
3.Map集合中
- 在 Java 中,HashMap 类并没有直接提供
iterator()
方法。如果尝试在 HashMap 上调用iterator()
方法会导致编译错误。 - 这是因为 HashMap 类继承自 AbstractMap 类,并实现了 Map 接口。而 Map 接口本身并没有定义
iterator()
方法,因此 HashMap 类也没有该方法。要通过创建entry对象来间接使用迭代器
不能直接 hashMap.iterator()!!!
Map:通过 entrySet()
方法获取键值对的集合,然后通过迭代器遍历键值对。例如:
Map<String, Integer> map = new HashMap<>();
// 添加键值对到 Map
Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
Iterator<Map.Entry<String, Integer>> iterator = entrySet.iterator();
while (iterator.hasNext()) {
Map.Entry<String, Integer> entry = iterator.next();
String key = entry.getKey();
Integer value = entry.getValue();
// 处理键值对的逻辑
}
在遍历过程中应注意删除或修改键值对可能会导致ConcurrentModificationException
异常。如需在遍历时进行增删操作,可以考虑使用迭代器的 remove() 方法或者使用 Iterator 的子类,例如 ListIterator
或 Spliterator
。
4.前三个总结
总结来说,只要实现了 Iterable
接口的集合,都可以通过迭代器进行遍历。迭代器提供了一种通用的遍历方式,适用于多种集合类型,并提供了方便的操作方法,如 next()、hasNext()、remove() 等。
5. 自定义迭代器
在使用自定义的迭代器之前,你需要实现
迭代器中的 hasNext() 和 next() 方法
,并提供适当的逻辑来返回下一个元素。
也就是:
但是上面的迭代器功能并不完整 ,下面我们通过一个例子,来演示自定义迭代器
Iterator<String> iterator = new Iterator<String>() {
private int index = 0;
private String[] elements = { "A", "B", "C" };
@Override
public boolean hasNext() {
return index < elements.length;
}
@Override
public String next() {
if (hasNext()) {
return elements[index++];
}
throw new NoSuchElementException();
}
};
while (iterator.hasNext()) {
String element = iterator.next();
// 处理元素的逻辑
}
在这个例子中,我们创建了一个自定义的迭代器,它有一个包含三个元素的固定数组。迭代器的 hasNext()
方法检查当前的索引是否小于数组的长度,如果是,则说明还有下一个元素;next()
方法返回当前索引对应的元素,并将索引递增。在遍历时,通过 iterator.hasNext()
判断是否还有下一个元素,然后通过 iterator.next()
获取当前元素。
你可以根据具体的需求实现自定义迭代器的逻辑,确定如何生成下一个元素,并在遍历时进行相应的处理。