遍历器皿的时候,用Iterator还是for循环,哪个效率更高
遍历容器的时候,用Iterator还是for循环,哪个效率更高?
老师说用Iterator的时候,编译器会自动完成一些东西,可是反编译以下这段代码:
用cavaj反编译后的代码如下:
请问在效率上,用iterator和用for循环,到底有什么区别呢?用哪个更好?
------解决方案--------------------
for循环是语言中循环控制结构。
而iterator则是用来遍历集合中的元素。本身是不能够循环遍历需要借助循环控制语句进行迭代元素。
个人认为iterator封装了循环体遍历元素的细节,使得编程人员无需关心集合结构,以及访问元素的操作。
例如:
for(int i=0;i<size;i++){
Object o=list.get(i);//List遍历元素
}
for(int i=0;i<size;i++){
Object o=objects[i];//数组遍历元素
}
而对iterator来说,使用一个统一的接口来访问具体的集合元素.
while(iterator.hasNext()){
Object o=iterator.next();//统一的接口来访问具体的集合元素.
}
------解决方案--------------------
对于声明了RandomAccessList(ArrayList有,LinkedList没有)来说,for稍高于iterator
但是对于没有声明的,则iterator远远高于for
老师说用Iterator的时候,编译器会自动完成一些东西,可是反编译以下这段代码:
import java.util.ArrayList;
import java.util.Iterator;
public class IteratorTest {
public static void main(String[] args)
{
ArrayList<String> str = new ArrayList();
for (int i = 0; i <=20; i++)
{
str.add("String" + i);
}
for (String myStr : str)
{
System.out.println(myStr);
}
for (Iterator i = str.iterator(); i.hasNext();)
{
System.out.println(i.next());
}
}
}
用cavaj反编译后的代码如下:
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Iterator;
public class IteratorTest
{
public IteratorTest()
{
}
public static void main(String args[])
{
ArrayList str = new ArrayList();
for(int i = 0; i <= 20; i++)
{
str.add((new StringBuilder()).append("String").append(i).toString());
}
String myStr;
for(Iterator i$ = str.iterator(); i$.hasNext(); System.out.println(myStr))
{
myStr = (String)i$.next();
}
for(Iterator i = str.iterator(); i.hasNext(); System.out.println(i.next())) { }
}
}
请问在效率上,用iterator和用for循环,到底有什么区别呢?用哪个更好?
------解决方案--------------------
for循环是语言中循环控制结构。
而iterator则是用来遍历集合中的元素。本身是不能够循环遍历需要借助循环控制语句进行迭代元素。
个人认为iterator封装了循环体遍历元素的细节,使得编程人员无需关心集合结构,以及访问元素的操作。
例如:
for(int i=0;i<size;i++){
Object o=list.get(i);//List遍历元素
}
for(int i=0;i<size;i++){
Object o=objects[i];//数组遍历元素
}
而对iterator来说,使用一个统一的接口来访问具体的集合元素.
while(iterator.hasNext()){
Object o=iterator.next();//统一的接口来访问具体的集合元素.
}
------解决方案--------------------
对于声明了RandomAccessList(ArrayList有,LinkedList没有)来说,for稍高于iterator
但是对于没有声明的,则iterator远远高于for