Adatstruktúra interfészek

A kollekcióhoz kapcsolódó interfészek közül az egyik legfontosabb az IEnumerable<T> interfész. Ez teszi lehetővé, hogy mindegyik kollekción implementációtól függetlenül végig tudjuk iterálni egy foreach ciklussal.


Az absztrakció következő szintje az IReadOnlyCollection<T> és ICollection<T> interfészek. Az ICollection<T> egy módosítható kollekciót ír le, aminek az elemei törölhetőek és bővíthetőek. Az IReadOnlyCollection<T> pedig egy olyat, amiből csak olvasni tudunk, de tudjuk az elemek számát.

Az olyan típusok esetén, mint a lista, halmaz és asszociatív tömb kapunk speciális interfészeket, mind olvasható és módosítható változatban is.


Láncolt lista
A tömb adatszerkezet kiváló ha előre tudjuk, hogy mennyi elemre van szükségünk. A bővítés csak úgy lehetséges, hogy létrehozzuk egy újabb tömböt, aminek a mérete a hozzáadandó elemek számával meg van növelve. Az új tömbbe átmásoljuk a tömb elemeit, majd az új tömbhöz hozzáadjuk az új elemeket. Végezetül pedig töröljük az eredeti tömböt.

Az algoritmus leírásából kiolvasható, hogy ez nem éppen ideális, mivel a sebességre igen negatív hatással van a másolás. Továbbá a másolás folyamán egy rövid időre duplázódik a programunk memóriahasználata.

Egy sokkal jobb megoldás lehet nagy mennyiségú, előre nem ismert számú adat tárolására a láncolt lista szerkezet.

A láncolt lista egy eleme két részből épül fel. Egyrészt tartalmazza a tárolni kívánt adatot, vagy adatokat és tartalmaz egy olyan mutatót, ami a lista egy másik elemét mutatja. Ha referencia a következő elemre nem létezik, akkor a lánc végén vagyunk.

A láncolt lista a dinamikus tömbökhöz képest hátránya a közbülső elemek elérhetőségéből ered. Míg egy tömb esetén ha tudjuk, hogy a k. elemet szeretnénk elérni, akkor a tömb indexelésével rögtön hozzáférhetünk ehhez az adathoz, addig a láncolt listában a lista elejéről indulva a mutatókon keresztül addig kell lépkedni, míg a k. elemhez nem érünk. A véletlenszerű lista elem megtalálása a lista hosszával arányos időt igényel.