我是靠谱客的博主 明亮芝麻,最近开发中收集的这篇文章主要介绍java 迭代器 for循环_Java哪个更有效,一个for-each循环或一个迭代器?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

小编典典

如果你只是在集合上徘徊以读取所有值,那么使用迭代器或新的for循环语法之间就没有区别,因为新语法仅在水下使用迭代器。

但是,如果你是指循环旧的“ c-style”循环:

for(int i=0; i

Object o = list.get(i);

}

然后,取决于基础数据结构,新的for循环(或迭代器)可能会效率更高。这样做的原因是,对于某些数据结构,get(i)是O(n)运算,这使循环成为O(n 2)运算。传统的链表就是这种数据结构的一个例子。作为基本要求,所有迭代器next()都应为O(1)操作,从而使循环为O(n)。

要验证新的for循环语法在水下使用迭代器,请比较以下两个Java代码段生成的字节码。首先是for循环:

List a = new ArrayList();

for (Integer integer : a)

{

integer.toString();

}

// Byte code

ALOAD 1

INVOKEINTERFACE java/util/List.iterator()Ljava/util/Iterator;

ASTORE 3

GOTO L2

L3

ALOAD 3

INVOKEINTERFACE java/util/Iterator.next()Ljava/lang/Object;

CHECKCAST java/lang/Integer

ASTORE 2

ALOAD 2

INVOKEVIRTUAL java/lang/Integer.toString()Ljava/lang/String;

POP

L2

ALOAD 3

INVOKEINTERFACE java/util/Iterator.hasNext()Z

IFNE L3

其次,迭代器:

List a = new ArrayList();

for (Iterator iterator = a.iterator(); iterator.hasNext();)

{

Integer integer = (Integer) iterator.next();

integer.toString();

}

// Bytecode:

ALOAD 1

INVOKEINTERFACE java/util/List.iterator()Ljava/util/Iterator;

ASTORE 2

GOTO L7

L8

ALOAD 2

INVOKEINTERFACE java/util/Iterator.next()Ljava/lang/Object;

CHECKCAST java/lang/Integer

ASTORE 3

ALOAD 3

INVOKEVIRTUAL java/lang/Integer.toString()Ljava/lang/String;

POP

L7

ALOAD 2

INVOKEINTERFACE java/util/Iterator.hasNext()Z

IFNE L8

2020-03-05

最后

以上就是明亮芝麻为你收集整理的java 迭代器 for循环_Java哪个更有效,一个for-each循环或一个迭代器?的全部内容,希望文章能够帮你解决java 迭代器 for循环_Java哪个更有效,一个for-each循环或一个迭代器?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部