Java中详解的增强的循环foreach

  

foreach是Java中的一种语法糖,几乎每一种语言都有一些这样的语法糖来方便程序员进行开发,编译期间以特定的字节码或特定的方式来对这些语法进行处理,能够提高性能,并减少代码出错的几率。在Java中还有比如泛型,自动拆箱,自动装箱,内部类,枚举等等。
  

  

foreach是用来对数组或者集合进行遍历的语法。具体语法如下:

        (元素类型避署:数组名/Iterable实例){   }   之前      

下面我们用foreach来对数组和一个集合进行遍历:

        int[]数组={1,2,3};      (我:int数组){      System.out.println(我);      }            名单列表=new ArrayList ();      list.add (1);      list.add (2);      list.add (3);      (对象obj:列表){      System.out.println (obj);      }   之前      

然后我们可以通过反编译工具,查看类文件内容:

        int[]数组={1,2,3};      int[]数组$=数组;      (int len=数组$美元。长度,我$=0;我$ & lt; len美元;我+ + $)      {      int i=数组$美元[我];      {      System.out.println(我);      }      }   名单列表=new ArrayList ();      list.add (1);      list.add (2);      list.add (3);      (java.util。迭代器我美元=list.iterator ();我.hasNext美元();      {      字符串s=(字符串)我$ . next ();      {      System.out.println(年代);      }      }      之前      

很明显:

  

1,对于数组,foreach循环实际上还是用的普通的,循环

  

2,对于集合,foreach循环实际上是用的迭代器迭代器迭代

  

如果我们想一边迭代,一边删除集合中的元素,如下:

        名单列表=new ArrayList ();      list.add (1); & lt; br>list.add (2);      list.add (3);      (对象obj:列表){      System.out.println (obj);      list.remove (obj);//一边迭代一边删除      }   之前      

这样写会报如下错误:这是一个并发修改异常报错

  

详Java中解的增强的循环foreach

  

原因:当迭代器运行的时候,在当前线程中,会单独的创建一个线程如负责继续迭代,B线程负责删除。B线程每次都会去检查一线程中的元素是否相同,如果不是就会报错

  

详Java中解的增强的循环foreach

  

因为上面删除的方法是使用集合(ArrayList的父类)集合中的删除()方法。该方法只能从集合中删除元素,不能把迭代器中的元素也删除了。

  

解决办法:使用迭代器迭代器中的删除()方法

        它=list.iterator Iterator ();      而(it.hasNext ()) {      对象obj=it.next ();      System.out.println (obj);      如果(obj.equals (1)) {      拔除();//这里是用迭代器的删除()方法& lt; br>//list.remove (obj);//如果你用集合方法,那么还是会报的错      }      }   之前      

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
  

Java中详解的增强的循环foreach