Seneste forumindlæg
Køb / Salg
 * Uofficiel Black/White liste V3
Login / opret bruger

Forum \ Programmering og webdesign \ Programmering
Denne tråd er over 6 måneder gammel

Er du sikker på, at du har noget relevant at tilføje?

Java: Iterator vs. for-each og while

Af Nørd bQnne | 12-09-2010 13:53 | 1402 visninger | 7 svar, hop til seneste
Hej HOL! Jeg har et spørgsmål angående hvorfor man er interesseret i at bruge en iterator-løkke frem for en for-each eller while. I det eksempel som min bog bruger til at forklare omkring løkker, bruger bogen en ArrayList og en notesbog som "ting" at behandle. Det giver jo meget find mening at man laver en: int index = 0; while(index > notes.size()) { System.out.println(notes.get(index)); indexx++; }- da denne løkke jo bare køre hele rækken af noter igennem, så længe int er over eller lig 0 og mindre størrelsen på listen. Denne løkke er jo også til at forstå, da den jo bare printer hele lortet ud, uden hæmninger: public void listNotes() { for(String note : notes) { System.out.println(note); } } ... men hvorfor i AL VERDEN har man behov for at bruge en "klog" løkke, der kan undersøge om der er et næste led i rækken, og hvis ja, så printer den, den? public void listNotes() { Iterator it = notes.iterator(); while(it.hasNext()) { System.out.println(it.next()); } } Mit spørgsmål er derfor: Hvornår er det en fordel at bruge den "kloge løkke" frem for en løkke der bare gør hvad den bliver bedt om? Mvh. bQnne. Ps. Jeg kender godt pastebin, men jeg syntes at det blev mere overskueligt at give jer koden direkte, i stedet for tre links.
--
Computer setups: Se profil. If life was a cake, how fast would you eat it?
#1
bQnne
Nørd
12-09-2010 13:54

Rapporter til Admin
Der skulle jo selvfølgelig have stået: Det giver jo meget fin mening at man laver en: *while løkke her*! :) Forresten har jeg undervisning på tirsdag, men jeg vil gerne smede mens jernet er varmt.
--
Computer setups: Se profil. If life was a cake, how fast would you eat it?
#2
NitroBlast
Maxi Nørd
12-09-2010 14:00

Rapporter til Admin
Nu ved jeg ikke, hvor meget du ved om pointer-lister, men metoden: int index = 0; while(index > notes.size()) { System.out.println(notes.get(index)); indexx++; }- kræver, at der for hver iteration udføres 5 ting: 1) Hent størrelse på "notes" 2) Sammenlign med "index" 3) Hent indhold på plads "index" 4) Udskriv indhold 5) inkrementer "index" metoden: public void listNotes() { Iterator it = notes.iterator(); while(it.hasNext()) { System.out.println(it.next()); } } skal kun udføre 3 ting for hver itaration: 1) Slå næste post op, og returner sand hvis det lykkedes. 2) Hent posten 3) Udskriv posten :)
--
http://xlinx.dk[...] E6600, 4GB PC2-6400, GA_965P_DS4_R1, 9800GT
#3
bQnne
Nørd
12-09-2010 14:04

Rapporter til Admin
#2 Man kan derfor sige at den sidste er mere generel (og i nogle tilfælde mere effektiv?) da den ikke er afhængig af talværdierne?
--
Computer setups: Se profil. If life was a cake, how fast would you eat it?
#4
TGV
Gæst
12-09-2010 14:07

Rapporter til Admin
I tillæg til #2 synes jeg personligt at det er nemmere at arbejde med iteratorer eftersom mange klasser (ihvertfald i c#) har dem indbygget i deres collections og på den måde får du en iterator der faktisk har den klasse som indholdet af listen er. Dette minimerer typecasting og andet besvær. Til nemme små løkker der skal køre meget hurtigt er det vel næsten nemmere at hente start pointeren og så gå index adresser op derfra :)
--
Gæstebruger, opret dit eget login og få din egen signatur.
#5
NitroBlast
Maxi Nørd
12-09-2010 14:20

Rapporter til Admin
#3 Jeg vil mene, at den er hurtigere, da der skal laves mindre. En Iterator er optimeret til at gennemløbe en række elementer på den hurtigst mulige måde, det er en "while"-løkke ikke. Du kan jo for sjov prøve at lave en liste, hvor du har 100000 elementer. Den kan du så gennemløbe 100000 gange på begge måder, imens du har en timerfunktion til at tage tid - jeg er sikker på, at Iteratoren er hurtigst.
--
http://xlinx.dk[...] E6600, 4GB PC2-6400, GA_965P_DS4_R1, 9800GT
#6
kastermester
Semi Supporter
12-09-2010 14:22

Rapporter til Admin
Nu er det jo vigtigt at huske at for-each (eller udviddet for som de kalder den på AU) jo rent faktisk bliver kompileret om til en while løkke som anvender iteratoren. Så det er måske ikke vildt vigtigt at lede efter grunde til hvornår man bør skrive en while løkke som anvender iteratorerne - men hellere bare være glad for den syntaktiske sukker som iteratorer og kompileren giver en.
--
Kaare
#7
bQnne
Nørd
12-09-2010 14:45

Rapporter til Admin
Tak for alle jeres svar - det er altid fedt med supplerende viden! :)
--
Computer setups: Se profil. If life was a cake, how fast would you eat it?

Opret svar til indlægget: Java: Iterator vs. for-each og while

Grundet øget spam aktivitet fra gæstebrugere, er det desværre ikke længere muligt, at oprette svar som gæst.

Hvis du ønsker at deltage i debatten, skal du oprette en brugerprofil.

Opret bruger | Login
NYHEDSBREV
Afstemning