对于Java中的For循环和Foreach,哪个更快

网站建设3年前发布
45 0 0

​Java遍历集合有两种方法。一个是最基本的for循环,另一个是jdk5引入的for each。通过这种方法,我们可以更方便地遍历数组和集合。但是你有没有想过这两种方法?哪一个遍历集合更有效?,For-each不是一种新语法,而是Java的语法糖。在编译时,编译器将此代码转换为迭代器实现,并将其编译为字节码。,我们可以通过执行命令javap-verbose-Testforeach反编译以下编译代码:,获得的详细字节码如下:,此字节码的一般含义是使用getfileld命令来获取integers变量并且调用List.iterator来获取迭代器实例和调用iterator.hasNext。如果返回true,调用iterator.next方法。,请看,这是迭代器遍历集合的实现逻辑。,现在让我们使用for循环方法和for-each方法进行测试。,这是测试结果:,20230306100741d345ae6231f9e4a26e77524dec00914807d185348,如你所见,结果是显而易见的。对于ArrayList,使用For循环方法的性能优于For each方法。,我们可以说for循环比for-each好吗?,答案是否定的。在下一个基准测试中,我们将ArrayList更改为LinkedList。 同样,这里是测试结果。,20230306100741916b0d04831a479b18f0215a8937b4b47049f6510,一些初学者可能想知道为什么ArrayList使用for循环方法遍历得更快,而LinkedList则更慢,速度也非常慢?,这由ArrayList和LinkedList数据结构决定。 ArrayList底层使用数组存储元素。数组是连续的内存空间。数据可以通过索引获得。时间复杂度为O(1),因此速度很快。,LinkedList的底层是一个双向链表。使用for循环实现遍历,每次都需要从链表的头节点开始。时间复杂度为O(n*n)。

© 版权声明

相关文章