Gyakorlati alapok III.

A Collection interfész

 

Az előző fejezetben iteráló komponensekkel ismerkedtünk meg, amelyek interfész formájában előzik meg a Collection interfészt.

 

A kérdés, hogy jogos-e ez a megközelítés a Java alkotói részéről, azaz az iterálás általánosabb tevékenység-e a kollekciónál (hiszen láttuk az interfész-hierarchiában, hogy az előbbi megelőzi az utóbbit)?

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

A válasz természetesen igen, hiszen az iterálás bármely -nemcsak kollekció-jellegű-, objektumon is elvégezhető, tehát ez mindenképpen általánosabb bármely kollekció építésénél és menedzselésénél.

Ebben a fejezetben a Collection interfésszel folytatjuk, amelyik 2. a hierarchiában...

 

Forrás - Source: www.myshared.ru

 

...valamint az öröklődésből következően már fog tartalmazni egy Iterator objektumot is az ős Iterable interfésztől. A Java-rendszer nem tartalmaz konkrét implementációt ezen interfészre, mert túl általános megközelítéseket tartalmaz, helyette a belőle továbbszármaztatott, egyre specifikusabb interfészek kerültek kidolgozásra. A Collection interfész objektumok csoportját zárja egységes adatszerkezetbe, ezen objektumokat elemeknek hívjuk.

Érdemes mindenekelőtt a Collection interfész szabványos kódját áttanulmányoznunk:

public interface Collection<E>
extends Iterable<E>

package java.util;

public interface Collection<E> extends Iterable<E>

boolean add(E o);

boolean addAll(Collection<? extends E> c);

void clear();

boolean contains(Object o);

boolean containsAll(Collection<?> c);

boolean equals(Object o);

int hashCode();

boolean isEmpty();

Iterator<E> iterator();

boolean remove(Object o);

boolean removeAll(Collection<?> c);

boolean retainAll(Collection<?> c);

int size();

Object[] toArray();

<T> T[] toArray(T[] a);
}

 

A Java alkotói tehát úgy vélték, hogy a fenti adatok és metódusok a legmegfelelőbb kiindulópontok egy kollekció megalkotásához és menedzseléséhez. A teljesség igénye nélkül nézzük meg legfontosabb tulajdonságait:

További, érdekes metódusok, amelyek nem 1 elemen, hanem egész kollekciókon hajtanak végre műveleteket (bulk operations):

Az interfész ismertetésekor észrevehettünk tömbműveleteket is:

Object[] toArray();

<T> T[] toArray(T[] a);


Ezen metódusok voltaképpen "kódhidak", összeköttetések visszafelé, a régebbi Java-rutinok felé, tehát a Java-alkotói a korlátozottan bár, de gondoltak a “lefelé történő” kompatibilitásra is, illetve néha kifejezetten hasznos lehet a kollekciókat vizsgálat, teszt, egyéb okokból tömbformátumban is “exportálni”.

Most pedig nézzük meg, hogy a Collection interfész specializálásával milyen jellegű kollekciók keletkeznek!

Set (halmaz)
A Set fő jellegzetessége, hogy nem tartalmazhat duplikált-többszörös elemeket, ennek vizsgálatához az öröklött equals() és hashCode() metódusokat használja fel. 2 db Set akkor egyenlő, ha ugyanazon elemeket tartalmazzák.

 

www.informatika-programozas.hu - Járulékos információ

Valós életből vett példák: bármilyen általánosabb megközelítésű katalógus, például állat-, és növényfajok, autómárkák, országnevek, megyenevek, fegyvernemek, stb. adatbázisa.

List (lista)
A List tartalmazhat többszörös elemeket, az elemek tárolása pedig szalagszerűn, szekvenciálisan történik és mivel az elempozíciók indexelve vannak, bármelyik listaelem kiválasztható, módosítható.

 

www.informatika-programozas.hu - Járulékos információ

Valós életből vett példák: pizzafutár rendelési címei, GPS-útvonalterv (vegyük észre, hogy ez sok esetben, mint fordított listabejárás visszafelé is működhet!).

Map (leképezés)
Legfőbb jellegzetessége, hogy kulcs-érték párokat tartalmaz. 1 kulcs csak 1 értéket azonosíthat be, illetve tiltott a többszörös kulcshasználat.

 

www.informatika-programozas.hu - Járulékos információ

Valós életből vett példák: személyi szám és személynév adatbázisa, ahol kikötés, hogy 1 személyhez csak 1 személyi szám tartozhat (és fordítva).

 

További érdekes map-példa: ruhatári szituáció, amelyben értékként kezelt ruháinkat a ruhatárnak nevezett tárolóegységbe (kell) tennünk. Az érték azonosítása nem név, hanem egy egyedi kulcs alapján történik (számozott jegy, biléta). Tiltott a többszörös kulcshasználat (adott számú biléta többször is előfordul), de ebben a helyzetben 1 kulcshoz rendelhetünk több értéket is (1 biléta, több kabát).

Queue (sor)
A FIFO (first-in-first-out) rendezőelv optimális adatszerkezete, amely tárolási mód során (amint azt megtanulhattuk a Sor és verem című fejezetből) az elemek szekvenciálisan, egymás után követik egymást. Bár az adatszerkezet legfontosabb tulajdonsága a szekvencialitás, azaz egymásutániság, létezhet másfajta elemrendezési szempont is, például prioritás alapján. Az adatszerkezet Java-implementációja erre és más rendezési szempontokra alapjában véve felkészíthető.

 

www.informatika-programozas.hu - Járulékos információ

Valós életből vett példa: számítógépes utasítások szekvenciális sorrendje a műveleti memóriában vagy bármely olyan tevékenység, amelyben nem lehet megtörni a megszabott egymásutániságot.

A fenti kollekcióknak léteznek további specializációi is, ezek a kollekciók önálló fejezeteiben kerülnek ismertetésre.