天天看點

Java集合架構7:集合的三種疊代方式

三種疊代能否删除元素

(1)普通for循環,可以删除,但是索引要–。

(2)疊代器,可以删除,但是必須使用疊代器自身的remove方法,否則會出現并發修改異常。

(3)增強for循環不能删除。

代碼示範
package list;
import java.util.ArrayList;
import java.util.Iterator;
public class Demo1_Foreach {
     /**
      * A:增強for概述
      *        簡化數組和Collection集合的周遊
      * B:格式
      *        for(元素資料類型 變量:資料或者Collection集合){
      *            
      *            使用變量即可,該變量就是元素
      *        }
      * C:案例示範
      *        數組,集合存儲元素用增強for周遊
      *
      * D:好處
      *        簡化周遊
      * 增強for循環底層依賴的是疊代器(Iterator)
      */
     
     public static void main(String[] args){
          int[] arr = {11,22,33,44};
          for(int i : arr) {
              System.out.println(i);
          }
          ArrayList<String> list = new ArrayList<>();
          list.add("a");
          list.add("b");
          list.add("c");
          list.add("d");
          for(String str : list){
              System.out.print(str + "....");
          }
          System.out.println();
          //1,普通for循環删除,索引要--
          for(int i = 0; i < list.size(); i ++) {
              if("b".equals(list.get(i))) {
                   list.remove(i--);//通過索引删除元素
              }
          }
          System.out.println(list);
          
          //2,疊代器删除
          /*Iterator it = list.iterator();
          while(it.hasNext()) {
              if("b".equals(it.next())) {
                   //list.remove("b);//不能用集合的删除方法,因為疊代過程中如果集合修改會出現并發修改異常
                   it.remove();
              }
          }*/
          
          /*for(Iterator<String> it2 = list.iterator();it2.hasNext();){
              if("b".equals(it2.next())) {
                   //list.remove("b)
                   it2.remove();
              }
          }*/
          
          //3,增強for循環,不能删除隻能周遊
          for(String str : list) {
              if("b".equals(str)) {
                   list.remove(str);
              }
          }
     }
     
}