迭代器 Iterator 的理解和相关集合 使用
1、理解
迭代器(Iterator)是设计模式中的一种,它允许程序员遍历容器(例如列表、集合等)中的元素,而无需了解容器底层的实现细节。在编程中,迭代器提供了一种方法来访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。
2、特点
- 顺序访问:迭代器通常按照某种顺序(如插入顺序或排序顺序)访问容器中的元素。
- 一次访问一个元素:迭代器在给定时刻只指向容器中的一个元素。
- 状态保存:迭代器保存了遍历容器时的状态,使得在迭代过程中可以记住当前的位置。
- 不修改容器:迭代器通常不修改容器本身,只用于访问元素。
3、使用
1、foreach迭代器(增强for循环)
package com.xx.iterator01;
import java.util.ArrayList;
public class Test01 {
/**
*深入迭代器 -- foreach
*/
public static void main(String[] args) {
// 创建一个ArrayList集合并添加一些元素
ArrayList<String> list = new ArrayList<>();
//往集合里面添加元素
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
list.add("eee");
//foreach循环
// 它声明了一个变量element(类型为String),该变量将在每次迭代中存储list中的下一个元素。list是外部定义的,并假定为包含String元素的某种集合(最常见的是List<String>)。
for (String element : list) {
System.out.println(element);
}
/**
* 使用foreach循环遍历集合的底层实现:
Iterator<String> it = list.iterator(); // 获取迭代器
String element;
//当他有下一个元素时
while (it.hasNext()) { // 使用while循环模拟for-each循环
element = it.next(); // 获取下一个元素
System.out.println(element); // 打印元素
}
*/
}
}
2、Iterator遍历元素
package com.xx.iterator01;
import java.util.ArrayList;
import java.util.Iterator;
public class Test02 {
/**
* 深入迭代器 -- Iterator
*
* 深入:Iterator如何遍历元素
*/
public static void main(String[] args) {
// 创建一个ArrayList集合并添加一些元素
ArrayList<String> list = new ArrayList<>();
//添加元素
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
list.add("eee");
//移除元素
list.remove("bbb");
//获取迭代器
Iterator<String> it = list.iterator();
//当有下一个元素时,继续循环打印
while(it.hasNext()){
String element = it.next();
System.out.println(element);
}
}
}
3、使用Iterator遍历元素,遍历到"bbb"时删除该元素
package com.xx.iterator01;
import java.util.ArrayList;
import java.util.Iterator;
public class Test02 {
/**
* 知识点:深入迭代器 -- Iterator
*
* 深入:Iterator如何遍历元素
*/
public static void main(String[] args) {
// 创建一个ArrayList集合并添加一些元素
ArrayList<String> list = new ArrayList<>();
//添加元素
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
list.add("eee");
//移除元素
list.remove("bbb");
//获取迭代器
Iterator<String> it = list.iterator();
//当有下一个元素时,继续循环打印
while(it.hasNext()){
String element = it.next();
//如果元素等于bbb,则删除
if(element.equals("bbb")){
//list.remove(element);/
it.remove();
}
//开始遍历
for (String element : list) {
System.out.println(element);
}
}
}
}
4、使用ListIterator遍历元素
package com.xx.iterator01;
import java.util.ArrayList;
import java.util.ListIterator;
public class Test04 {
/**
* 深入迭代器 -- ListIterator
*
* 需求:使用ListIterator遍历元素
*/
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
list.add("eee");
ListIterator<String> listIterator = list.listIterator();
while(listIterator.hasNext()){
String element = listIterator.next();
System.out.println(element);
}
}
}
5、使用ListIterator遍历元素,遍历到"bbb"时删除
package com.xx.iterator01;
import java.util.ArrayList;
import java.util.ListIterator;
public class Test05 {
/**
* 深入迭代器 -- ListIterator
*
* 需求:使用ListIterator遍历元素,遍历到"bbb"时删除
*/
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
list.add("eee");
ListIterator<String> listIterator = list.listIterator();
//当下一个位置有元素时,继续循环
while(listIterator.hasNext()){
//将下一个位置的元素,赋值给elelment
String element = listIterator.next();
//如果元素输入为bbb,删除bbb
if(element.equals("bbb")){
listIterator.remove();
}
}
//开始遍历集合
for (String element : list) {
System.out.println(element);
}
}
}
6、使用ListIterator遍历元素,遍历到"bbb"时添加"xyz"
package com.xx.iterator01;
import java.util.ArrayList;
import java.util.ListIterator;
public class Test06 {
/**
* 深入迭代器 -- ListIterator
*
* 需求:使用ListIterator遍历元素,遍历到"bbb"时添加"xyz"
*/
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
list.add("eee");
ListIterator<String> listIterator = list.listIterator();
while(listIterator.hasNext()){
String element = listIterator.next();
//当元素为bbb时,添加xyz
if(element.equals("bbb")){
listIterator.add("xyz");
}
}
//遍历集合
for (String element : list) {
System.out.println(element);
}
}
}
7、使用ListIterator遍历元素,遍历到"bbb"时替换成"xyz"
package com.xx.iterator01;
import java.util.ArrayList;
import java.util.ListIterator;
public class Test07 {
/**
* 深入迭代器 -- ListIterator
*
* 需求:使用ListIterator遍历元素,遍历到"bbb"时替换成"xyz"
*/
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
list.add("eee");
ListIterator<String> listIterator = list.listIterator();
while(listIterator.hasNext()){
String element = listIterator.next();
//当元素为bbb时,设置bbb替换成xyz
if(element.equals("bbb")){
listIterator.set("xyz");
}
}
//遍历集合
for (String element : list) {
System.out.println(element);
}
}
}
8、使用ListIterator指定下标遍历元素
package com.xx.iterator01;
import java.util.ArrayList;
import java.util.ListIterator;
public class Test08 {
/**
* 深入迭代器 -- ListIterator
*
* 需求:使用ListIterator指定下标遍历元素
*/
public static void main(String[] args) {
//新建一个集合
ArrayList<String> list = new ArrayList<>();
//添加元素
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
list.add("eee");
//获取迭代器,从下标为1的开始
ListIterator<String> listIterator = list.listIterator(1);
while(listIterator.hasNext()){
String element = listIterator.next();
System.out.println(element);
}
}
}
9、使用ListIterator倒序遍历元素
package com.qf.iterator01;
import java.util.ArrayList;
import java.util.ListIterator;
public class Test09 {
/**
* 深入迭代器 -- ListIterator
*
* 需求:使用ListIterator倒序遍历元素
*/
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
list.add("eee");
//获取一个迭代器,从集合末尾开始
ListIterator<String> listIterator = list.listIterator(list.size());
//当迭代器中,前一个位置有元素时,继续循环
while(listIterator.hasPrevious()){
//将前一个元素赋值给element
String element = listIterator.previous();
System.out.println(element);
}
}
}