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