★迭代器:
Java集合框架的集合類,我們有時候稱之為容器。容器的種類有很多種,比如ArrayList、LinkedList、HashSet...,每種容器都有自己的特點,ArrayList底層維護的是一個數組;LinkedList是鏈表結構的;HashSet依賴的是哈希表,每種容器都有自己特有的數據結構。
因為容器的內部結構不同,很多時候可能不知道該怎樣去遍歷一個容器中的元素。所以為了使對容器內元素的操作更為簡單,Java引入了迭代器模式!
把訪問邏輯從不同類型的集合類中抽取出來,從而避免向外部暴露集合的內部結構。
public class CollectionDemo1 { public static void main(String[] args) { //集合中可以存任意類型 Collection co = new ArrayList<>(); co.add("a"); co.add("sfadjkjksd"); //迭代器 獲取迭代器 Iterator it = co.iterator(); while(it.hasNext()){//判斷是否存在下個元素 String s = (String)it.next();//獲取下個元素 //System.out.println(s); System.out.println(s.length()); } } }
★增強型for循環:
1.增強型for循環使用起來比較方便,代碼也比較簡單,如果只是操作集合中元素的而不使用索引的話,建議用此方法。
對於普通for循環,如果需要使用索引進行其它操作的話,建議用這個。
2,特點:
書寫簡潔:
對集合進行遍歷,只能獲取集合元素,不能對集合進行操作,類似迭代器的簡寫形式,但是迭代器可以對元素進行remove操作(ListIterator可以進行增刪改查的操作)。
3,格式:
for(數據類型變量名 :被遍歷的集合(collection)或者數組) {
執行語句
}
public class ForEach { public static void main(String[] args) { fun(); } //for循環的弊端 有下標 //增強for循環優點 代碼少了 沒有索引 public static void fun(){ int[] arr={12,5,689,45,23,69,87}; // for (int i = 0; i < arr.length; i++) { // System.out.println(arr[i]); // } for(int i: arr){ System.out.println(i+1);//沒有下標,不能對元素進行單個操作,整體加一 } System.out.println(arr[0]); } }
★迭代器和增強型for循環的並發異常:
/* 迭代器的並發異常 java.util.ConcurrentModificationException
* 增強for循環 java.util.ConcurrentModificationException
* 在遍歷或者迭代過程中對集合進行增刪 都會發生異常
* */
public class ListDemo { public static void main(String[] args) { List<String> s=new ArrayList<String>(); s.add("欲問青天這人生有幾何"); s.add("這人生有幾何"); s.add("怕這去日苦多");
//判斷集合中是否有"這人生有幾何",假如有,那么把"愛的故事上集"添加到集合中.
/*//增強型for循環 for(String i:s){ if (i.equals("這人生有幾何")) { s.add("愛的故事上集"); } } */ /*迭代器 Iterator<String> it=s.iterator(); while (it.hasNext()) { String s1 = (String) it.next(); if (s1.equals("這人生有幾何")) { s.add("愛的故事上集"); System.out.println(s1); } } */
//判斷集合中是否有"這人生有幾何",假如有,那么把"愛的故事上集"添加到集合中. for (int i = 0; i < s.size(); i++) { //System.out.println(s.get(i)); if((s.get(i)).equals("這人生有幾何")){ s.add("愛的故事上集"); } } for (int i = 0; i < s.size(); i++) { System.out.println(s.get(i)); }
}
}
