For 循环和 Foreach,在 Java 中哪个更快?

在本文开始前,先给大家分享几个好用的IDEA激活码

这里提供几个最新的激活码,有需要的朋友可以试试,先到先用:

2022和2023Intellij IDEA最新激活码,IDEA稳定专属激活码(持续更新)

2022和2023Pycharm激活码,Pycharm稳定专属激活码(持续更新)

2022和2023Webstorm激活码,Webstorm稳定专属激活码(持续更新)

2022和2023Phpstorm激活码,Phpstorm稳定专属激活码(持续更新)

2022和2023Goland激活码,Goland稳定专属激活码(持续更新)

 

我在 2019 年找工作时,我被问到的一个问题是我们是否应该使用 for 或 forEach 遍历 ArrayList?

关于 FOREACH 和 FOR 之间偏好差异的争论并不新鲜。我的印象是 FOREACH 更快。我终于意识到我错了。

仅供参考,在 1.5 版中引入的 for-each 循环(或增强的 for 循环)通过完全隐藏迭代器或索引变量来消除混乱和出错的机会。

我认为 for 和 foreach 之间唯一的实际区别是,在可索引对象的情况下,我们无权访问索引。

for(int i = 0; i < mylist.length; i++) { 
if(i < 5) { 
//做某事
} else { 
//做其他事
} 
}

但是,我们可以使用 foreach 创建一个单独的索引 int 变量。例如:

整数指数 = -1; 
for(int myint : mylist) {
索引++; 
if(index < 5) { 
//做某事
} else { 
//做其他事
} 
}

让我们写一个简单的类,它有 foreachTest() 方法,它使用 forEach 迭代一个列表

当我们编译这个类时,编译器会在内部将这段代码转换成一个迭代器实现。我通过执行javap -verbose IterateListTest反编译了编译后的代码。

从上面的字节码,我们可以看出,
a)。getfield 命令用于获取变量整数。
b). 调用 List.iterator 获取迭代器实例
c)。调用iterator.hasNext,如果返回true,调用iterator.next方法。

让我们做一个性能测试。在 IterateListTest 的主要方法中,我创建了一个列表并使用 for 和 forEach 循环迭代它。

以下是结果:

正如我们所见,for 循环的性能优于 for-each。现在,让我们使用 LinkedList 而不是 ArrayList。您可以看到 for-each 的性能对于 LinkedList 更好。

ArrayList 内部使用数组来存储元素。由于数组是连续的内存空间,时间复杂度为 O(1),因为数据是通过索引检索的。

LinkedList 使用双向链表。我们用for循环实现遍历时,每次都是从链表的头节点开始,所以时间复杂度是O(n*n)。

发布者:admin,转转请注明出处:https://www.ajihuo.com/soft/5493.html

(0)
上一篇 2023年4月27日 下午6:16
下一篇 2023年5月3日 下午5:39

相关推荐

  • Java 21 特性及示例

    在本文开始前,先给大家分享几个好用的IDEA激活码 这里提供几个最新的激活码,有需要的朋友可以试试,先到先用: 2022和2023Intellij IDEA最新激活码,IDEA稳定专属激活码(持续更新) 2022和2023Pycharm激活码,Pycharm稳定专属激活码(持续更新) 2022和2023Webstorm激活码,Webstorm稳定专属激活码(…

    2023年9月30日
    00
  • Java 仍然流行的原因

    在本文开始前,先给大家分享几个好用的IDEA激活码 这里提供几个最新的激活码,有需要的朋友可以试试,先到先用: 2022Intellij IDEA最新激活码,IDEA稳定专属激活码(持续更新) 2022Pycharm激活码,Pycharm稳定专属激活码(持续更新) 2022Webstorm激活码,Webstorm稳定专属激活码(持续更新) 2022Phpst…

    2022年10月17日
    00
  • 在 Java 中运行 100 万个线程

    在本文开始前,先给大家分享几个好用的IDEA激活码 这里提供几个最新的激活码,有需要的朋友可以试试,先到先用: 2022和2023Intellij IDEA最新激活码,IDEA稳定专属激活码(持续更新) 2022和2023Pycharm激活码,Pycharm稳定专属激活码(持续更新) 2022和2023Webstorm激活码,Webstorm稳定专属激活码(…

    2023年3月7日
    00
  • 什么是增删改查(CRUD)

    在本文开始前,先给大家分享几个好用的IDEA激活码 这里提供几个最新的激活码,有需要的朋友可以试试,先到先用: 2022和2023Intellij IDEA最新激活码,IDEA稳定专属激活码(持续更新) 2022和2023Pycharm激活码,Pycharm稳定专属激活码(持续更新) 2022和2023Webstorm激活码,Webstorm稳定专属激活码(…

    2023年2月13日
    00
  • 密码保护:Django开发实战课程快速开发

    无法提供摘要。这是一篇受保护的文章。

    2022年11月4日
    00

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注