.oisyn schreef op vrijdag 22 juli 2005 @ 13:54:
[...]
Onzin natuurlijk, met die objecten heb je een manier om compares te doen, niets meer en niets minder. De verdere hele tree implementatie (insertion, deletion, balancing, searching, iterators) afdoen als slechts 10 regels code vind ik
nogal kort door de bocht.
De IComparer levert je -1, 0 of 1, dus of het element links, in hetzelfde bakje of rechts moet. Nou weet ik het niet, maar dat is de basis van je tree bouw / maintenance routine dacht ik zo. Via recursie kun je dan vrij compact de hap opzetten.
Iterators wordt wat lastig zonder yield, in Jesse Liberty's boek over .NET 2.0 heeft hij wel een mooie gemaakt met de nieuwe interator functionaliteit in .NET 2.0 en een linked list.
[...]
STL


[...]
Waarom dan wel een hashtable implementatie maar geen balanced tree implementatie? Ik zie niet echt een verschil tussen de twee op gebied van implementatie-moeilijkheid oid. Volgens jouw zelfde argumentatie is een hashtable implementatie in .Net ook overbodig. Zelfs een ArrayList implementatie is overbodig (ook slechts 10 regels code).
Het punt is dat een arraylist en een hashtable outofthebox werken, i.e.: zonder IComparable en zonder IComparer. Ze werken wel met die interfaces mocht je meer flexibiliteit willen, maar dat hoeven ze niet.
Een balanced tree HEEFT die interface implementaties nodig, anders kun je de elements niet comparen.
[...]
Nee, het enige wat je hoeft te doen is hier en daar wat casten, dat vind ik nou niet bepaald "het leeuwendeel zelf schrijven". Daarnaast vind ik je linked list een beetje slecht voorbeeld, met een ArrayList kun je precies hetzelfde (dus afgezien van wat performance voor- en nadelen heb je een alternatieve structuur die ook kan opslaan wat je op wilt slaan). Maar er bestaat geen alternatieve structuur voor een binary tree, terwijl het imho net zo'n basisstructuur is als een ArrayList.
ArrayList is een dyn. array, meer niet hoor

geen linked node structuur.
Nogmaals, ik snap best dat er soms noodzaak voor is, maar dan bouw je die zelf of trekt er een van de plank(==google). OOKAL omdat je toch veel werk moet doen, ivm die IComparer en IComparable. Nu is 2 ints vergelijken niet zo lastig, maar 2 objects vergelijken, dan moet je wellicht values gaan vergelijken, bv PK fields, en dan moet je bv compound pk's gaan vergelijken, allemaal narigheid waar je zelf iets aan moet doen. Zodra je dat dan klaar hebt kun je met je eigenlijke structuur aan de gang en die is dan echt zo uit te schrijven. Tuurlijk was het handig geweest als er een tree structure class was meegeleverd, maar dat heeft men niet gedaan, mede om de reden dat het niet direct bruikbaar was, je moet eerst zelf wat doen.
Ik moet zeggen dat ik het gezemel over 'dit zit er niet in!!' nooit zo begrijp. In vroeger tijden had je stdlib en nog wat onzin en dat was het wel. Ik heb nu maar eens een Hashtable derived class gemaakt die met dupes overweg kan in hashes, dus buckets heeft per hashcode, dus je kunt meerdere values per hashkey opslaan. Ik kan dan klagen waarom zoiets er niet inzit, ik kan ook de 20 of wat is het, regels code intikken en dan heb ik de structuur zelf. Tuurlijk, het zou mooi zijn als die class er al ingezeten had, maar dat kun je natuurlijk ook van vele andere classes zeggen die je dagelijks moet schrijven.