Цитата(Tony @ 11.9.2006, 16:32 ) | | Какой из циклов(while,for) будет бысстрей работать с коллекцией? Слышел 4то for. |
Абсолютно одинаково. Возьмем такой класс:
| Код | import java.util.*;
public class Test { public void iter1() { List <String>list=new ArrayList<String>(); for(Iterator<String> it=list.iterator();it.hasNext();){ String string=it.next(); } }
public void iter2() { List <String>list=new ArrayList<String>(); Iterator <String>it=list.iterator(); while(it.hasNext()){ String string=it.next(); } } } |
и дизассемблируем его:
| Код | Compiled from "Test.java" public class Test extends java.lang.Object{ public Test(); Code: 0: aload_0 1: invokespecial #1; //Method java/lang/Object."<init>":()V 4: return
public void iter1(); Code: 0: new #2; //class java/util/ArrayList 3: dup 4: invokespecial #3; //Method java/util/ArrayList."<init>":()V 7: astore_1 8: aload_1 9: invokeinterface #4, 1; //InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator; 14: astore_2 15: aload_2 16: invokeinterface #5, 1; //InterfaceMethod java/util/Iterator.hasNext:()Z 21: ifeq 37 24: aload_2 25: invokeinterface #6, 1; //InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object; 30: checkcast #7; //class java/lang/String 33: astore_3 34: goto 15 37: return
public void iter2(); Code: 0: new #2; //class java/util/ArrayList 3: dup 4: invokespecial #3; //Method java/util/ArrayList."<init>":()V 7: astore_1 8: aload_1 9: invokeinterface #4, 1; //InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator; 14: astore_2 15: aload_2 16: invokeinterface #5, 1; //InterfaceMethod java/util/Iterator.hasNext:()Z 21: ifeq 37 24: aload_2 25: invokeinterface #6, 1; //InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object; 30: checkcast #7; //class java/lang/String 33: astore_3 34: goto 15 37: return
} |
Как видишь байткод одинаковый.
|