Superior ciklus

Kerül bemutatásra, mint egy új funkció a nyelv J2SE 5.0, fokozott az zónabementre végiglépkedhetünk gyűjtemény anélkül, hogy hozzon létre egy bejáró, vagy anélkül, hogy kiszámítja a kezdő és befejező feltételeket a számláló változó. Superior ciklus a legegyszerűbb az új funkciók azonnal tartalmazzák a kódban. Ebben a hegy, akkor megjelenik egy javított ciklus helyettesíti a hagyományos módon szekvenciális hozzáférés elem van a gyűjteményben.

Szóval, mi növeli a hurok néz ki? Tegyük fel, hogy van egy sor tárgyak nevezett TechTip RecentTips. Használhatja a gyűjtemény továbbfejlesztett hurok az alábbiak szerint:

Azt olvastam, hogy a „minden TechTip a RecentTips”. Itt a változó tip jelöli az aktuális példányt TechTip gyűjtemény. Mivel a „minden” készítmény, cserébe a meghosszabbítása építeni is nevezik, cserébe minden design.

Ha összehasonlítjuk a fokozott for ciklus egy tipikus út halad végig a gyűjtemény, világossá vált, hogy az egyes ciklusok során egyszerű és lehet, hogy a kód olvashatóbbá.

Szintén fontos megjegyezni, hogy a megerősített hurok célja, hogy egyszerűsítse dolgozik generikumok. Bár ezt a tanácsot, hogy mely két példát a megerősített for ciklus generikus, nem a hangsúly a tip. Ehelyett a célja a tippeket akkor többet alapvető változásokat teheti a kódot kell használni minden ciklusban.

Először is, nézd meg, hogyan használhatja a hurok végighaladni a tömb elemeit. Az egyszerűség kedvéért, egy tömböt hat terhelési ints képviselő négyzetek ints nullától öt. De a ciklus, ami iteráció:

Vonal szemlélteti a klasszikus felhasználás a ciklust. Ez határozza meg a kezdeti értéke egy vagy több számláló teremt megállási feltétel, és leírja, hogy a számlálók növelhető.

Itt van egy rövid program, OldForArray, mellyel ciklust.


public class OldForArray

Összeállításához és futtatásához OldForArray programot, és akkor megkapja a következő:

Ha megváltoztatja a vizsgálati program használja a fokozott hurok, akkor adja meg a megfelelő mennyiség, és a gyűjtemény, ami jön a változókat. Itt vannak a vonalak fokozott hurok:

Elolvashatja a vonalon a „végigmegy a gyűjtemény a négyzetek.” Az aktuális elem szükség lesz Int I. "

Nem kell, hogy meghatározza, hogy hány elem a tömbben, mielőtt a hurok. Arra sincs szükség, hogy meghatározza, hogyan növeljük az aktuális pozícióját. „Takaró alatt” javított ciklusa a tömb megegyezik a korábban bemutatott ciklus.

Test NewForArray program megadja ugyanazt az eredményt, OldForArray.


public class NewForArray

Akkor tudod használni list.get (I) utalni az aktuális elemet. Például a következő program, OldForArrayList felhasználja autoboxing kitöltésére ArrayList majd olvasni ArrayList:


import java.util.ArrayList;
import java.util.List;

public class OldForArrayList <
private static List négyzet = új ArrayList ();

privát staticvoid outputList () <
A (int i = 0; i System.out.printf ( "Squared .. \ n".
i, squares.get (i));
>
>

nyilvános staticvoid fő (String args []) <
fillList ();
outputList ();
>
>

Azonban, mivel ArrayList része része a gyűjtemény, hogy sokkal gyakoribb iterálására segítségével bejáró az alábbi sorrendben:


míg a (iterator.hasNext ()) <
doSomethingWith (iterator.next ());
>

Egy csomagba ebben a ciklusban, amint azt az alábbi program, IteratorForArrayList:


import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;

public class IteratorForArrayList

private static List négyzet = új ArrayList ();

privát staticvoid outputList () <
Iterator iterator = squares.iterator ();
int J = 0;
a (; iterator.hasNext ();) <
System.out.printf ( "Squared .. \ n".
j ++, iterator.next ());
>
>

nyilvános staticvoid fő (String args []) <
fillList ();
outputList ();
>
>

Ez némileg szokatlan, hogy egy ciklus nem az első vagy a harmadik paraméter. Nincs kezdeti állapotban van, valamint a növekmény a listán végezzük a hurok hívás iterator.next ().

Superior ciklus explicitté teszi használatát a bejáró felesleges. Ahelyett, hogy egy bejáró egy ArrayList, majd a bejáró egy hurokban, akkor használja a következő:

Ez azt jelzi, hogy a neve a gyűjtemény terek. Arra is rámutat, hogy a jelenlegi referenciapont egész típusú és az a terület, amelyre a változó tartalmazza.

Ez a kód nem fordul le, mert nincs lehet tudni, mi a tartalma a ArrayList az Integer. Ennek kijavításához, akkor kell használni egy másik funkció be J2SE 5.0, nevezetesen a generikus gyógyszerek. Meg kell adnia a nyilatkozatot és a terület meghatározása, abban csak elemeit Integer. Ezt meg lehet tenni az alábbiak szerint:

A következő program, NewArrayList, megmutatja, hogyan kell használni a bővített hurok generikus


import java.util.List;
import java.util.ArrayList;

public class NewArrayList <
private static List terek
= Új ArrayList ();

privát staticvoid outputList () <
int J = 0;
A (Integer téren. négyzetek) <
System.out.printf ( "Squared .. \ n".
j ++, négyzet);
>
>

nyilvános staticvoid fő (String args []) <
fillList ();
outputList ();
>
>


void cancelAll (Collection c) <
A (Iterator i = c.iterator (); i.hasNext ();) <
TimerTask tt = (TimerTask) i.next ();
tt.cancel ();
>
>

Ezután bemutatjuk a továbbfejlesztett hurkos, hogy lemondanak a használata iterátorok:


void cancelAll (Collection c) <
A (Object o. c)
((TimerTask) o). megszünteti ();
>

Van még egy alany kezelésére elemei a gyűjtemény, mint egy tárgy típusát, majd a vezető, hogy TimerTask típusát. Ez orvosolható a bevezetése, a generikus gyógyszerek az alábbiak szerint:


void cancelAll (Collection c) <
A (TimerTask feladat. c)
task.cancel ();
>

Fontos, hogy a fokozott hurok lehet használni az egész világon. Nem tudja használni a továbbfejlesztett hurok:

  • Eltávolít egy elemet ahogy áthalad gyűjtemények
  • Módosítani kell a jelenlegi rés egy tömb vagy lista
  • Ahhoz végighaladni beszedés vagy tömbök

Ettől eltekintve azonban ilyen esetben meg kell próbálnia, hogy a javított kódot ciklus, hogy egyszerűsítse a kódot.

További információk a kiterjesztett ciklus, lásd-minden ciklusban.

Kapcsolódó cikkek