Jelenlegi hely

21.1. Interfészek

A gyűjtemény interfészek különböző típusú gyűjtemények leírását teszik lehetővé, amint az alábbi ábra mutatja. Ezek az interfészek lehetővé teszik a különböző gyűjtemény-reprezentációk egységes kezelését. A gyűjtemény interfészek a Gyűjtemény keretrendszer alapjainak tekinthetők.

Gyűjtemény interfészek

Ahogy az ábrán látható, a gyűjtemény interfészek hierarchiát alkotnak: a Set egy specializált fajtája a Collection-nek, a SortedSet specializált fajtája a Set-nek, és így tovább. A hierarchia két egymástól független fából áll: a Map nem Collection leszármazott.
Vegyük figyelembe, hogy a gyűjtemény interfészek (általános, generikus) típus paraméterekkel dolgoznak. Például a Collection interfész deklarációja:

public interface Collection<E> ...

Az <E> szintaxis azt jelenti, hogy az interfész általános (generikus) típussal működik. Amikor deklarálunk egy Collection-t, meg tudjuk határozni, hogy milyen típusú objektumot tartalmaz a gyűjtemény. A típus paraméter a fordítóprogram számára lehetővé teszi, hogy csak az adott típusú objektumot engedje belerakni a gyűjteménybe, így csökkenti a futásidejű hibák számát.

Mikor megértjük, hogyan használjuk ezeket az interfészeket, akkor megértettük a Gyűjtemény keretrendszer lényegét. Ez a fejezet be fogja mutatni az általános irányelveket, hogy hogyan lehet hatékonyan használni ezeket az interfészeket. Továbbá irányt ad, hogy mikor melyik interfészt használjuk. Minden egyes interfészhez tanulni fogunk programozási trükköket, hogy segítsen megoldani a legtöbb későbbi problémát.

Hogy megőrizze a gyűjtemény interfészek kezelhetőségét, a Java platform nem különíti el az interfészeket a tartalom módosíthatósága szempontjából. (Bizonyos esetekben a gyűjtemények lehetnek állandók, fix méretűek vagy éppen csak bővíthetők.) A módosítási lehetőségek az egyes interfészekben szabadon választhatók: az adott implementáció választhatja azt is, hogy nem támogatja az összes műveletet. Ha egy nem támogatott művelet kerül meghívásra, az adott gyűjtemény implementáció az UnsupportedOperationException kivételt dobja. A Java platform minden általános célú implementációja támogatja az összes opcionális műveletet is.

A gyűjtemény interfészek

Collection

A gyűjtemény hierarchia gyökere. A Collection objektumok csoportját reprezentálja, amiket elemeknek hívjuk. A gyűjtemény interfész a legkisebb közös nevező a gyűjtemény implementációk között, és akkor érdemes ezt választani, ha a lehető legnagyobb rugalmasságra van szükség. A gyűjtemények néhány típusa engedélyezi az elemek duplikálását, a többi pedig nem. A gyűjtemények néhány típusa rendezett, a többi nem rendezett. A Java platform nem biztosít közvetlen implementációt ehhez az interfészhez, ehelyett a sokkal specifikusabb al-interfészeket implementálja.

Set

Ez a gyűjtemény nem tartalmazhat duplikált elemeket. Ezt az interfészt halmazok tárolására szokták használni, mint például a futó processzek halmaza.

List

A List rendezettséget biztosító gyűjtemény, néha szekvenciának is hívják. A listák tartalmazhatnak duplikált elemeket. A lista felhasználója egész index segítségével hozzá tud férni az elemekhez (hasonlóan a tömbök indexeléséhez), valamint lehetőséget kap a lista egyszerű bejárásához.

Queue

Tipikusan ez a gyűjtemény szokta tárolni a feldolgozásra váró elemeket. A Collection alapműveletein felül lehetőséget ad további beszúrási, kivételi, és megtekintési műveletekre.

Legtöbbször, de nem szükségképpen az elemeket FIFO (first-in-first-out) elv szerint rendezi. A kivételek között van a prioritási sor, amelyik rendezi az elemeket valamilyen szempont alapján. Bármilyen rendezést használunk, a sor elején van az az elem, amit legelőször el szeretnénk távolítani a remove vagy a poll metódus meghívásával. A FIFO sor minden új elemet a sor végére illeszt be. Más fajta sorok használhatnak más elhelyezési szabályokat.

Megjegyzés: A Queue gyűjteményekkel terjedelmi okokból a továbbiakban nem foglalkozunk.

Map

A kulcsokat értékekké képezi le. A leképezések nem tartalmazhatnak duplikált kulcsokat. Minden egyes kulcs legfeljebb egy értéket tud leképezni. Másként fogalmazva a Map kulcs-érték párokat tárol.

Az utolsó két gyűjtemény interfész csupán rendezett verziója a Set-nek és a Map-nek:

SortedSet

Az elemek növekvő sorrendben tárolását teszi lehetővé. Számos kiegészítő művelettel biztosítja, hogy kihasználhassuk a rendezettséget. Ezt az interfészt szokták használni olyan rendezett halmazként, mint például egy szólista vagy tagsági lista.

SortedMap

A leképezések kulcs szerinti növekvő sorrendbe tárolását teszi lehetővé. A rendezett leképezést használjuk a rendezett gyűjtemények kulcs/érték párjainál. Ilyen például a szótár vagy a telefonkönyv.