Herko_ter_Horst schreef op dinsdag 01 juli 2014 @ 16:34:
[...]
Dit zal je moeten onderbouwen met meer dan "voor zover ik weet", want het lijkt mij klinkklare onzin. Een iterator is niks anders dan enig ander Java object (tenzij het toevallig gaat om een iterator die bijv. een database-connectie vasthoudt en niet Closeable is, maar dan nog is het geen GC probleem, maar een probleem van de implementator en/of de gebruiker van die iterator).
Bij gebrek aan gedetailleerde, specifieke kennis over een bepaalde implementatie, zou ik altijd kiezen voor een iterator, aangezien de kans bijzonder groot is dat de iterator is geoptimaliseerd en andere manieren van sequentiële toegang niet. Doe per ongeluk maar eens een for-loop met een get(i) op een LinkedList.
[...]
Bij gebrek aan een iterator niet natuurlijk (maar ook dan moet je oppassen, zie het LinkedList-voorbeeld hierboven).
"Voor zover ik weet" is gebaseerd op een Android game waar een aantal iterators gebruikt werden om door een aantal lists heen te lopen en problemen gaven bij het garbage collecten.
Wat ons opviel was dat elke keer als een list volledig iterated was, de gc de iterator wilde gaan opruimen wat soms 50 tot zelfs 100 ms duurde. Na overstap naar een simpele for-loop was de delay volledig weg.
Mijn theorie erachter was dat de iterator opruimen meer tijd kostte doordat je deze van tevoren aanmaakt en de "out of scope"-tijd dus langer is dan de objecten die direct aan 't eind van de for-loop destructed kunnen worden.
De delay merkten we op omdat de game elke seconde heel even bevroor, wat weg was toen we de Iterator vervingen.
Creepy schreef op dinsdag 01 juli 2014 @ 16:38:
Herko_ter_Horst: Een get()? Gelukkig kan het vaak ook zo (vanaf Java 1.5 al)
Java:
1
2
3
4
| LinkedList<String> list = new LinkedList<String>();
for (String s: list) {
// doe iets met s
} |
Daar komt geen get aan te pas. Persoonlijk zie ik deze syntax liever dan een Iterator.
Onder water gebruikt een extended for-loop / foreach een iterator
Edit: bah, crappy telefoon liet me niet zien dat ik aan 't spuitelf-en ben...
[
Voor 13% gewijzigd door
Merethil op 01-07-2014 16:45
]