ПредишенСледващото

Се представя като нова функция на езика в J2SE 5.0, засиленото за контур Ви позволяват да повтаряте чрез събиране без да е необходимо да се създаде итератор, или без да се налага да се изчисли началната и крайната условия за контра променлива. Superior цикъл е най-простият от новите функции включим в кода си. В този съвет, ще видите един по-добър цикъл заменя традиционните начини за пореден достъп до елементи в колекцията.

Така че, това, което е увеличено за контур изглежда като? Да предположим, че имате набор от обекти, наречена TechTip RecentTips. Можете да използвате колекция от подобрена в продължение на линия, както следва:

Можете да го прочетете като "за всяка TechTip в RecentTips". Тук променливата върха се използва за обозначаване на текущата колекция например TechTip. Благодарение на "за всеки" формулировка, в замяна на разширяване да се изгради наричани още, в замяна на всеки дизайн.

Ако сравните подобрена за цикъл е типичен начин за обхождане чрез събиране, стана ясно, че за всеки цикъл е проста и може да направи кода по-разбираемо.

Също така имайте предвид, че засиленото за линия е предназначена да опрости работата с генеричните лекарства. Въпреки, че този съвет дали да се включват два примера за използване на усъвършенствани контур с генеричните лекарства, не е във фокуса на върха. Вместо това, целта на съветите ще научите повече основни промени, които могат да направят, за да си код, за да се използва за всеки цикъл.

Да видим първо как можете да използвате една линия, за да превъртате през елементите на масив. За простота масив с шест натоварване цели числа, които представляват квадрати цели числа от нула до пет. Но за цикъл, което прави повторение:

Line илюстрира класически използването на цикъла. Той определя първоначална стойност на един или повече гишета, създава условие прекратяване на договора, и описва как броячите могат да бъдат увеличени.

Ето една кратка програма, OldForArray, който се използва за цикъл.


обществени клас OldForArray

Събиране и стартирате OldForArray програма, и ще получите следното:

Ако промените програмата за изпитване да се използва подобрена за цикъл, можете да укажете на съответните количества, както и събирането, който идва от променливите. Това са линиите е увеличено за контур:

Можете да прочетете тази линия като "се изпълнява за колекция от техните квадрати." Сегашната елемент ще бъдат съотнесени Int I. "

Не е необходимо да се определи колко много елементи в масива преди цикъла. Налице е също така няма нужда да се уточни как да увеличите текущата позиция. "Под одеяло" подобрен цикъл на масива е еквивалентно на цикъла представени по-рано.

Тест NewForArray програма дава същия резултат, OldForArray.


обществени клас NewForArray

След това можете да използвате list.get (I) да се позова на текущия елемент. Например, следната програма, OldForArrayList, използва autoboxing за пълнене ArrayList и след това се чете от ArrayList:


внос java.util.ArrayList;
внос java.util.List;

обществени клас OldForArrayList <
частни статични Списък квадрати = нов ArrayList ();

частен staticvoid outputList () <
за (INT I = 0; и System.out.printf ( ". Squared е .. \ Н".
I, squares.get (I));
>
>

обществени staticvoid основни (String опцията []) <
fillList ();
outputList ();
>
>

Въпреки това, тъй като ArrayList е част от част от колекцията, това е по-често, за да превъртите използване итератор в следния ред:


докато (iterator.hasNext ()) <
doSomethingWith (iterator.next ());
>

Можете да се обединят в този цикъл, както е показано в следната програма, IteratorForArrayList:


внос java.util.ArrayList;
внос java.util.List;
внос java.util.Iterator;

обществени клас IteratorForArrayList

частни статични Списък квадрати = нов ArrayList ();

частен staticvoid outputList () <
Iterator итератор = squares.iterator ();
Int J = 0;
за (; iterator.hasNext ()) <
System.out.printf ( ". Squared е .. \ Н".
J ++, iterator.next ());
>
>

обществени staticvoid основни (String опцията []) <
fillList ();
outputList ();
>
>

Това е малко необичайно да има цикъл не е първият или третият параметър. Не е първоначалното състояние, както и увеличението в списъка се извършва в течение iterator.next на повикване ().

Superior цикъл изрично използването на Итераторът ненужни. Вместо да се създава итератор към ArrayList, а след това използвайте Итераторът в една линия, можете да използвате следното:

Това показва, че името на събирането на квадрати. Той също така посочва, че сегашната референтна точка е тип Integer и района, за който се отнася променливата.

Този код няма да се компилира, защото няма как да знае какво е съдържанието на ArrayList от тип Integer. За да поправите това, ще трябва да използвате различна функция, въведена в J2SE 5.0, а именно генеричните лекарства. Трябва да посочите в декларацията, и определянето на зоната, тя може да съдържа само елементи от тип Integer. Това може да стане по следния начин:

Следната програма, NewArrayList, показва как да използвате подобрената за контур с генеричните лекарства


внос java.util.List;
внос java.util.ArrayList;

обществени клас NewArrayList <
частен статично Списък площади
= New ArrayList ();

частен staticvoid outputList () <
Int J = 0;
за (цяло число квадрат. квадратчета) <
System.out.printf ( ". Squared е .. \ Н".
J ++, квадрат);
>
>

обществени staticvoid основни (String опцията []) <
fillList ();
outputList ();
>
>


нищожен cancelAll (Collection в) <
за (Iterator аз = c.iterator (); i.hasNext ()) <
TimerTask ТТ = (TimerTask) i.next ();
tt.cancel ();
>
>

След това, ние се въведе подобрена за цикъл, да се откаже от използването на итератори:


нищожен cancelAll (Collection в) <
за (Object о. в)
((TimerTask) о). затвори ();
>

Все още е обект за лечение на елементи от колекцията като тип обект, а след тях, водещи до тип TimerTask. Това е отстранена чрез въвеждането на генерични лекарства, както следва:


нищожен cancelAll (Collection в) <
за (TimerTask задача. в)
task.cancel ();
>

Важно е, че увеличено за контур може да се използва в целия свят. Не можете да използвате подобрената за цикъл:

  • За да премахнете елементи, докато прекосяват колекции
  • За да промените текущата слота в масив или списък
  • За обхождане на множество колекции или масиви

Въпреки това, с изключение на тези случаи, трябва да се опитате да използвате подобрената цикъл код за опростяване на кода.

За повече информация относно удължения цикъл, вижте-за всеки цикъл.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!