[rml]Glimi in "[ /14] nette code release versie *FAQ Upd"[/rml]
Daar schreef ik:
9. Gebruik een Iterator ipv een Enumeration, ArrayList ipv Vector, HashMap ipv Hashtable
Ik hoor veel mensen altijd maar roepen dat ze niet begrijpen wat nou het verschil is tussen Vector en ArrayList. Hiervoor moet ik een klein stukje geschiedenis oprakelen.
In de tijd voor Java 1.2 ( heeeeeel erg vroeger ) programmeerde je Java met allerlei losse datastructuren. Al deze datastructuren hadden weinig gemeen en waren dus totaal niet uitwisselbaar. Als jij in je class een Vector had staan en je wou toch een LinkedList gaan gebruiken, dan mocht jij mooi op verschillende punten in je code gaan hakken met alle risico's vandien.
Toen kwam Java 1.2 en Sun had het licht gezien. Er kwamen opeens gezamelijke interfaces waar een datastructuur aan moest voldoen. Bijvoorbeeld de List voor DataLijsten, Set voor DataLijsten waar geen duplicaten in zitten. Sun had zelfs een overkoepelende interface gemaakt waar alle datastructuren zich aan moeten houden. De 'Collections' waren geboren.
Omdat Vector en HashTable bestonden voordat de Collection interface bestond, zijn deze classes aangepast om te voldoen aan deze interface. Vector implementeert List en HashTable implementeert de interface Map. Echter er waren eerst ook vervangers voor deze classes gemaakt, nl. ArrayList en HashMap (welke qua naam beter beschrijven dan Vector en HashTable) Eigenlijk zijn Vector en HashMap toen om 'legacy' redenen blijven hangen toen.
Het enige verschil wat nog overbleef was dat Vector en HashTable beide syncronized (en dus thread safe waren) en de 'nieuwe' implementaties ArrayList en HashMap niet, net als alle andere collection classes.
Waarom nu HashMap en ArrayList gebruiken?
• Consitentie met de rest van de rest van de collections
• Beter uitwisselbaar met de rest van de collections ( door synchronisatie 'oude' )
• Ontbreken legacy methodes
Door het gebruik van Collection classes ben je eigenlijk ook verplicht Enummeration te laten vallen en Iterator te gaan gebruiken. Simpelweg omdat Collections Iteratoren geven ipv Enummerations. (Gebruik die ook, om je los te koppelen van de implementatie!)
Wat is er enorm verbeterd aan Enummeraties in Iteratoren dan?
Sun zegt er dit over.
An iterator over a collection. Iterator takes the place of Enumeration in the Java collections framework. Iterators differ from enumerations in two ways:
Iterators allow the caller to remove elements from the underlying collection during the iteration with well-defined semantics.
Method names have been improved.
Feitelijk komt het neer op een optie om Objecten uit een Collection te verwijderen, zodat je niet alleen de Collectie kan lezen zonder de implementatie te kennen, maar ook kan wijzigen.
--------------
Wat martin zegt dus

Hmmmz, ik moet dat stukje eigenlijk nog es afmaken