wydajność fora

0

Przypadkowo natchnąłem się na konstrukcję pętli for, której wcześniej nie znałem. Wobec tego mam do Was pytanie..

public class ciekawyFOR
{
    public static void main(String[] args)
    {
        String tab[] = new String[10];
        
        for(int i=0; i<tab.length; i++){
            if(i%2==0) tab[i]="podzielne";
            else tab[i]="niepodzielne";
        }
        //1
        for (String p : tab)
            System.out.println("p - " + p);
        //2
        for (int i=0; i<tab.length; i++)
            System.out.println("i - " + tab[i]);
    }
} 

Który z for'ów jest efektywniejszy (wydajniejszy)? Numer 2?

0

Powinny być mniej więcej tak samo szybkie.

1

tak ciężko zmierzyć samemu?

0
ŁF napisał(a)

tak ciężko zmierzyć samemu?

No fakt, łatwo :)

0

Ta druga postać pętli for czyli:

for(element: implementacjaIterable)
{
//wykonywane instrukcje
}

to cukierek składniowy, czyli uproszczona postać szczególnie często używanej postaci pętli dla kontenerów:

Iterator<TypElementu> iteratorKolekcji = implementacjaIterable.iterator();
while(iteratorKolekcji.hasNext())
{
TypElementu element = iteratorKolekcji.next();
//wykonywane instrukcje
}

Tablica od wersji 5 Javy pochodzi od niejawnej klasy, która implementuje interfejs Iterable<TypElementu>.
Można też czysto umownie założyć, że niejawna klasa tablicy implementuje również interfejs RandomAccess bo iteracja po tablicy zawsze odbywa się przez sporo szybsze indeksy, a nie przez metodę next(). Wywołanie w pętli for tej hipotetycznej metody next() iteratora spowoduje to samo co w ArrayList, Stack, Vector metoda get(index). Czyli efektywnie zostanie użyty operator [].
http://download.oracle.com/javase/1.5.0/docs/api/java/util/RandomAccess.html

1 użytkowników online, w tym zalogowanych: 0, gości: 1