首页 > 编程知识 正文

三个for循环的嵌套优化,java增强型for循环

时间:2023-05-04 21:41:17 阅读:48708 作者:2731

前言

增强for循环的原因:在JDK5之前的版本中,遍历数组或集合中的元素需要获取数组的长度或集合的迭代程序,这很麻烦。

为了简化此类操作,JDK5定义了用于增强for循环的新语法。 扩展for循环只能用于实现数组或Iterable接口的集合。

语法格式:

for (变量型变量)需要迭代的数组或集合) {

}

在JAVA中,遍历集合和数组通常有三种格式:

for(intI=0; i list.size (; I ) {

system.out.print(list.get(I ),);

}

迭代器iterator=list.iterator (;

while(iterator.Hasnext () ) )。

system.out.print(iterator.next (),);

}

for(integerI:list ) {

system.out.print(I ',';

}

第一个是普通的for循环遍历,第二个是使用迭代器的遍历,第三个通常称为增强for循环(for each )。

实现原理

可见第三种形式是JAVA提供的语法糖。 现在,让我们来分析一下这个增强的for循环的基础是如何实现的。

反向编译以下代码:

for(integerI:list ) {

system.out.println(I;

}

反编译后:

Integer i;

for (iterator iterator=list.iterator ); iterator.hasNext (; system.out.println(I ) }

I=(integer ) iterator.next );

}

反编译的代码其实很复杂,请按执行顺序分解一下:

Integer i; 定义临时变量I

迭代器iterator=list.iterator (; 获取列表迭代器

iterator.hasNext (; 判断迭代器中是否有未扫描的元素

I=(integer ) iterator.next ); 获取第一个未遍历的元素,并将其代入临时变量I

system.out.println(I )输出临时变量I的值

以这种方式循环,直到遍历列表中的所有元素。

在反编译中,我们发现实际上JAVA增强的for循环的基础是在迭代器模式下实现的。

强化for循环的基坑

这里说的是强化for循环的孔,其实主要是不了解强化for循环的实现原理的人可能会陷入的孔。

因为扩展for环路由迭代器实现,所以一定有迭代器的特性。

Java有故障快速机制。 如果使用迭代器遍历元素,请在删除集合时小心。 使用不当可能会导致concurrentmodificationexception。 这是运行时异常,不发生编译期间。 只有在程序实际运行时才会爆炸。

以下代码:

for(studentstu:students ) {

if(stu.getid ()==2) ) ) )。

students.remove(stu;

}

抛出concurrentmodificationexception异常。

迭代器在独立线程上运行,并具有mutex锁。 创建迭代器时,将创建指向原始对象的单链索引表。 如果原始对象的数量发生更改,则此索引表的内容不会同步更改,因此根据故障快速原则,迭代器会立即抛出,因为在索引指针向后移动时找不到要重复的对象

Java.util.concurrentmodificationexception异常。

所以迭代器不允许工作中重复的对象发生变化。

但是,可以使用Iterator自己的方法remove ()来删除对象。 Iterator.remove ) )方法删除当前迭代对象,同时保持索引的一致性。

在正确的遍历过程中删除元素的姿态:

iteratorstuiter=students.iterator (;

wile(stuIter.Hasnext ) ) }

Student student=stuIter.next (;

if(student.getid ()==2) ) ) ) )。

stuIter.remove (; //在此示例中,使用Iterator的remove方法删除当前对象。 使用List的remove方法还会出现concurrentmodificationexception

}

那么,这里介绍了强化for循环的实现原理,以及弄错使用方法可能会陷入的漏洞。 所以,虽然是简单的for-each语法,但也必须理解其原理。 否则,可能会引起令人费解的问题。

总结

以上是这篇文章的所有内容。 希望这篇文章的内容对大家的学习和工作有一定的参考学习价值。 如果有疑问的话,请在评论中交流。 感谢您对编剧的支持。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。