迭代器 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()){//将下一个位置的元素,赋值给elelmentString element = listIterator.next();//如果元素输入为bbb,删除bbbif(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时,添加xyzif(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替换成xyzif(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()){//将前一个元素赋值给elementString element = listIterator.previous();System.out.println(element);}}
}