collection data type
Megjelenés
(collection (abstract data type) szócikkből átirányítva)
Főnév
collection data type (tsz. collection data types)
- (informatika) A kollekció (collection) absztrakt adatszerkezet (ADT) egy olyan általános „doboz”, amiben egy vagy több azonos típusú elemet tárolunk, és amely fölött meghatározott műveletek (insert, delete, search, iterate stb.) értelmezettek. A kollekció‐ADT olyan általános osztály, amely különféle konkrét adatszerkezeteket foglal magában (lista, halmaz, térkép, priorizált sor stb.), közös jellemzőjük, hogy az elemek rendezve vagy rendezetlenül, de csoportosan tárolódnak.
1. A kollekció‐ADT típusai
| ADT típusa | Leírás |
|---|---|
| Lista (Sequence) | Elemek sorrendje fontos; megőrizzük a beszúrási sorrendet, vagy konkrét indexen tudunk műveletet végezni. |
| Verem (Stack) | LIFO viselkedés (utolsóként be, elsőként ki); specializált lista, ahol csak a „végén” engedünk beszúrást/kivételt. |
| Sor (Queue) | FIFO viselkedés (elsőként be, elsőként ki); specializált lista, ahol csak fej/vég műveletek értelmezettek. |
| Halmaz (Set) | Ismétlődésmentes elemek gyűjteménye, nem fontos a beszúrási sorrend. |
| Többszörös halmaz (Multiset/Bag) | Engedélyezi az ismétlődő elemeket, de nem tartja meg a sorrendet. |
| Térkép (Map/Dictionary) | Kulcs–érték párokat tárolunk; minden kulcshoz egy érték tartozik, a kulcsok egyediek (mint egy halmaz). |
| Prioritási sor (Priority Queue) | Minden elemhez prioritást rendelünk; a „legmagasabb prioritású” elem kerül először ki. |
2. Műveletek és szpecifikáció
2.1. Közös műveletek minden kollekciónál
- Create(): új, üres kollekció létrehozása.
- isEmpty() → bool: igaz, ha nincs benne elem.
- size() → int: elemek száma.
- clear(): minden elem törlése, üres kollekció.
2.2. Beszúrás és törlés
- add(x) vagy insert(x):
xbeszúrása a kollekcióba. - remove(x):
xtörlése (set): ha létezik, eltávolítjuk. - deleteAt(i) (sequence): adott indexű elem eltávolítása.
- push(x)/pop() (stack), enqueue(x)/dequeue() (queue), offer(x)/poll() (priority queue).
2.3. Lekérdezés és keresés
- contains(x): igaz, ha
xeleme a kollekciónak. - get(i) (sequence):
i‐edik elem visszaadása. - peek() (stack/queue): a következő eltávolítandó elem megtekintése anélkül, hogy kivennénk.
- find(key) (map): adott kulcshoz tartozó érték lekérése.
2.4. Iterálás
- iterator() vagy
forEach(f): sorban végigjárja az összes elemet. - keys(), values(), entries() (map): kulcsok, értékek, kulcs–érték párok elkérése.
3. Implementációk és komplexitások
| ADT | Gyakori implementációk | Enqueue/insert | Dequeue/remove | Search/lookup |
|---|---|---|---|---|
| Sequence | tömb (array-list), láncolt lista | O(1) amort. / O(n) | O(n) / O(1) head | O(1) / O(n) |
| Stack | tömb, láncolt lista | O(1) | O(1) | O(n) |
| Queue | körkörös tömb, kettős láncolt lista | O(1) | O(1) | O(n) |
| Set | hash‐tábla, kiegyensúlyozott fa (tree) | O(1) / O(log n) | O(1) / O(log n) | O(1) / O(log n) |
| Multiset | hash‐tábla + számlálók, fában többszörösítés | O(1) / O(log n) | O(1) / O(log n) | O(1) / O(log n) |
| Map | hash‐tábla (unordered_map), fa (map) | O(1) / O(log n) | O(1) / O(log n) | O(1) / O(log n) |
| PrioQueue | bináris kupac, fibonacci kupac | O(log n) | O(log n) | O(n) vagy O(log n) |
- Tömb alapú sequence:
std::vector(C++),ArrayList(Java), dinamikusan reallokálódik; gyors véletlen elérésO(1). - Láncolt lista:
std::list(C++),LinkedList(Java); gyors beszúrás/kivétel ismerős pozíciónO(1), de drága véletlen elérésO(n). - Halmaz:
- HashSet:
std::unordered_set(C++),HashSet(Java); várhatóO(1)beszúrás/kivétel, de rossz hash eseténO(n). - TreeSet:
std::set(C++),TreeSet(Java); garantáltO(log n)műveletek, rendezett kulcsok.
- HashSet:
- Térkép:
- HashMap:
std::unordered_map,HashMap;key → value,O(1)átlagosan. - TreeMap:
std::map,TreeMap; rendezett kulcs,O(log n).
- HashMap:
- Prioritási sor:
- binary_heap (
std::priority_queueC++);push/popO(log n). - pairing/fibonacci heap: amortizált
O(1)beillesztés,O(log n)kivétel.
- binary_heap (
4. Mikor melyik kollekciót válasszuk?
- Sorrend‐megőrzés kell → Sequence (
vectorvagylinked list) - Stack vagy Queue sémát követünk → Stack / Queue
- Gyors ellenőrzés, hogy szerepel-e egy elem → Set
- Kulcs–érték párokban tárolunk → Map
- Legmagasabb prioritású kell először → PriorityQueue
- Duplikátumok engedélyezettek, de sorrend nem fontos → Multiset/Bag
5. Nyelvi támogatás és könyvtárak
- C++ STL:
std::vector<T>,std::list<T>,std::forward_list<T>std::deque<T>(double‐ended queue)std::set<T>,std::multiset<T>,std::unordered_set<T>std::map<K,V>,std::multimap<K,V>,std::unordered_map<K,V>std::priority_queue<T>
- Java Collections:
ArrayList,LinkedList,Vector,Stack,DequeHashSet,TreeSet,LinkedHashSetHashMap,TreeMap,LinkedHashMap,HashtablePriorityQueue
- Python:
list,collections.dequeset,frozenset,collections.Counter(multiset)dictheapq(min‐heap)
6. Iterátorok és funkcionális műveletek
Modern kollekció‐API‐k iterátorokon vagy streameken keresztül is biztosítanak:
- forEach, map, filter, reduce: pl. Java Streams, C++ ranges, Python list comprehensions.
- Iterator interfész: egységes mód végigjárni bármely kollekciót anélkül, hogy a belső szerkezetre hagyatkozunk.
7. Összefoglalás
A kollekció ADT az algoritmusok és szoftvertervezés egyik legfontosabb építőköve. Azáltal, hogy absztrakt módon definiálunk műveleteket (insert, delete, search, iterate stb.), függetleníteni tudjuk az algoritmuslogikát a konkrét belső reprezentációtól. A gyakorlatban:
- Megfelelő kollekció‐ADT kiválasztása kritikus a teljesítmény és erőforrás‐felhasználás optimalizálásához.
- A könyvtári implementációk (STL, Java Collections, Python built‐ins) használata erősen javasolt a saját, hibalehetőségektől mentes fejlesztéshez.
- A funkcionális és iterátor‐alapú megközelítések lehetővé teszik a kód deklaratív, tömör és biztonságos felépítését.
A kollekciók ismerete és helyes alkalmazása minden komolyabb szoftverprojekt alapja: adatgyűjtés, feldolgozás, kommunikáció, párhuzamos végrehajtás és felhasználói interakciók során is szükség van a megfelelő ADT‐k használatára.
- collection data type - Szótár.net (en-hu)
- collection data type - Sztaki (en-hu)
- collection data type - Merriam–Webster
- collection data type - Cambridge
- collection data type - WordNet
- collection data type - Яндекс (en-ru)
- collection data type - Google (en-hu)
- collection data type - Wikidata
- collection data type - Wikipédia (angol)