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
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
= Ú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.