迭代器 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);}}
}