20 Klasszikus adatszerkezetek 21 Kollekci keretrendszer Gbor Dnes
20. Klasszikus adatszerkezetek 21. Kollekció keretrendszer Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 1
20. Klasszikus adatszerkezetek 1. 2. 3. 4. 5. 6. 7. 8. Az adatszerkezetek rendszerezése Absztrakt tárolók Tömb Tábla Verem Sor Fa Irányított gráf, hálózat Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 2
Adatszerkezetek Ä Adatmodell, eljárásmodell Ä Adatszerkezet: egymással kapcsolatban álló adatok, objektumok összessége Ä Elemei: csomóponti adatok, kapcsolatok Ä Reprezentáció: gráffal • csomóponti adatok: gráf csúcsai • kapcsolatok: gráf élei Ä Műveletek • Konstrukciós műveletek • Szelekciós műveletek Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 3
Példa: Hallgató objektumok összekapcsolása Boldog Boglárka Fekete Farkas Madár Aladár Boldog Boglárka Fekete Farkas Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 4
Adatszerkezetek rendszerezése az elemek közötti kapcsolatok alapján ADATSZERKEZETEK Asszociatív Tömb Tábla Szekvenciális Verem Gábor Dénes Főiskola (IAI) Sor Hierarchikus Fa Hálós Ir. gráf Hálózat Programozási technológia (Java) - V. / 5
Asszociatív adatszerkezet Asszociatív csoport Szekvenciális adatszerkezet Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 6
Hierachikus adatszerkezet Hálós adatszerkezet Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 7
Absztrakt tárolók Ä Címezhető tárolókon absztrakt tárolási lehetőségek: • Egydimenziós tömb • Láncolt lista Ä Absztrakt tároló helye: bármilyen címezhető hardver elem (pl. memória, lemezes egység) Ä Az adatszerkezetek leképezhetők absztrakt tárolókra Egydimenziós tömb Ä A tárolt objektumok közvetlenül egymás után helyezkednek el, ugyanolyan távolságra egymástól Ä Elemei indexeléssel közvetlenül címezhetők Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 8
Láncolt lista Ä Elemei mutatókon keresztül össze vannak kapcsolva Ä A listát az első listaelem mutatója (L) meghatározza Ä Egy listaelem: adat + mutató 1 2 3 n. . . L Adat Mutató Végjel Egyirányú nyíltvégű láncolt lista Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 9
Láncolt lista (folyt. ) Ä Elemei fizikailag bárhol elhelyezkedhetnek Ä Előnye: beszúrás, törlés egyszerű Ä Változatai: • Nyíltvégű lista • Cirkuláris (zárt) lista • Rendezett lista • Kétirányú (szimmetrikus) lista • Fejelt lista • Multilista (többszörös lista) Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 10
Tömb Ä Asszociatív adatszerkezet Ä Fajtái: • Általános tömb • Ritka mátrix Általános tömb Ä Elemei indexeléssel közvetlenül elérhetők Ä Hátrányai • méretét előre meg kell adni • indexhatárok dimenziónként kötöttek Ä Tárolás: egydimenziós tömbben (az adatszerkezet általában maga a tároló) Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 11
Ritka mátrix Ä Olyan többdimenziós tömb, ahol a tömb nagy része kihasználatlan Ä Tárolás: láncolt listában Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 12
Tábla Ä Asszociatív adatszerkezet Ä Egy elem: egyedi kulcs + adat Ä Tárolás: egydimenziós tömbben vagy láncolt listában Kérem azt az adatot, melynek kulcsa. . . Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 13
Táblák osztályzása (tárolási mód alapján) Ä Ä Soros tábla Önátrendező tábla Rendezett tábla Hasító (kulcstranszformációs) tábla Hasítótábla (hash table) Ä Hasítófüggvény (kulcstranszformációs függvény): kulcs elem fizikai címe Ä Hasonlítgatások száma minimális Ä Legjobb táblaszervezési mód: egyértelmű leképezés a kulcsok és a fizikai címek között Ä Szinonímák • azonos címre leképezett kulcsok • megvalósítás: láncolt listával Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 14
Hasítótábla egyértelmű leképezéssel Hasítófüggvény Kulcs Hasítótábla szinonímákkal Hasító(Kulcs) Kulcs+Adat Kulcs+Adat Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 15
Verem (stack) Ä Szekvenciális adatszerkezet Ä LIFO (Last In First Out) szerkezet Ä Műveletei: PUSH, POP, TOP PUSH POP Legfiatalabb Legidősebb Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 16
Verem (folyt. ) Ä Tárolás: általában egydimenziós tömbben Ä Alkalmazásai: • Elemek sorrendjének megfordítása • Visszatérési utak megjegyzése • Memóriaverem: metódusok hívásakor a visszatérési címek és lokális változók tárolása Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 17
Sor (queue) Ä Szekvenciális adatszerkezet Ä FIFO (First In First Out) adatszerkezet Ä Műveletei: PUT, GET, FIRST GET . . . Első Legidősebb Gábor Dénes Főiskola (IAI) PUT Utolsó Legfiatalabb Programozási technológia (Java) - V. / 18
Sor (folyt. ) Ä Tárolás: egydimenziós tömbben vagy láncolt listában Ciklikus tárolás egydimenziós tömbben: 1. 2. 3. 4. 5. . — 34 66 2 999 7 Első Max — — Utolsó Ä Alkalmazása: elemek feldolgozása érkezési sorrendben Például: pufferek (billentyűzetpuffer, nyomtatópuffer) Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 19
Fa Ä Hierarchikus adatszerkezet Ä Elemei: csomópontok és egyirányú kapcsolatok Ä Rekurzív definíció, rekurzív algoritmusok 0. szint 1. szint Levél (0 fokú) 3. szint Gábor Dénes Főiskola (IAI) Gyökér a b c d e Elágazás (3 fokú) f Részfa g Programozási technológia (Java) - V. / 20
Fával kapcsolatos fogalmak Ä Kezdőpont, végpont a Ä Gyökér, elágazás, levél Ä Csomópont foka, fa foka b c Ä Szülő, gyerek Ä Szintszám Ä Fa magassága d e f g Ä Rendezett fa Ä Kiegyensúlyozott fa Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 21
Fa bejárása Ä Gyökérkezdő (preorder) a a b c d g e f Ä Gyökérvégző (postorder) b c a b d e f c a b g d e f c a Gábor Dénes Főiskola (IAI) b c d e f g Programozási technológia (Java) - V. / 22
Bináris fa Gyökeréből legfeljebb két részfa ágazik: baloldali és jobboldali részfa Bejárása Ä Gyökérkezdő (preorder) a b d c e g h i j f Ä Gyökérközepű (inorder) d b a g e i h j c f Ä Gyökérvégző (postorder) d b g i j h e f c a Gábor Dénes Főiskola (IAI) a c b d f e g h i j Programozási technológia (Java) - V. / 23
Rendezett bináris fa 8 4 2 1 Ä Ä Ä 12 6 3 5 10 7 9 11 14 13 15 Keresési fa (kereső fa, rendező fa) A baloldali részfa összes eleme kisebb, mint a szülő A jobboldali részfa összes eleme nagyobb, mint a szülő Egy n szintű fa elemeinek száma maximum 2 n+1 -1 Egy elemet maximum n+1 lépésben megtalálunk Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 24
Kiegyensúlyozott bináris fa 8 4 12 2 1 6 3 5 10 7 9 11 14 13 15 Elemek beszúrási sorrendje: 8, 4, 12, 10, 9, 14, 2, 3, 6, 1, 15, 5, 7, 13, 11 Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 25
Degenerált bináris fa 1 2 3 4 5 6 7 8 9 10 Elemek beszúrási sorrendje: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 Gábor Dénes Főiskola (IAI) 11 12 13 14 15 Programozási technológia (Java) - V. / 26
Fa tárolása multilistában a b c d g e f Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 27
Hálós adatszerkezetek Irányított gráf e d a c b Hálózat 1 a 2 Gábor Dénes Főiskola (IAI) d 2 4 c 7 9 b Programozási technológia (Java) - V. / 28
21. Kollekció keretrendszer 1. 2. 3. 4. 5. 6. 7. 8. 9. A kollekció keretrendszer felépítése A Collection interfész és leszármazottai A Hash. Set osztály – hasítási technika A Tree. Set osztály – Comparator Iterátor A List interfész implementációi A Map és a Sorted. Map interfész A Hashtable osztály A Tree. Map osztály Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 29
Kollekció keretrendszer (Collections Framework) Ä Interfészeket és osztályokat definiál különböző konténerek hatékony létrehozása céljából Ä Elemei: • Interfészek • kollekció • térkép • iterátor • Implementációk (osztályok) • Algoritmusok (Collections osztály) Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 30
Kollekció keretrendszer Hash. Set Tree. Set Hashtable «interfész» Collection «interfész» Set Array. List «interfész» List Vector Stack Linked. List «interfész» Sorted. Set Algoritmusok Hash. Map «interfész» Iterator Tree. Map «interfész» Sorted. Map «interfész» List. Iterator Gábor Dénes Főiskola (IAI) Osztályok Interfészek Collections Programozási technológia (Java) - V. / 31
A Collection interfész és leszármazottai «interfész» Collection Array. List Hash. Set «interfész» List Vector Stack Linked. List Tree. Set «interfész» Sorted. Set Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 32
Collection interfész (kollekció) Ä Objektumokat tárol «interfész» Collection size(): int Ä Van legalább két konstruktora: is. Empty(): boolean contains(elem: Object): boolean • paraméter nélküli contains. All(c: Collection): boolean • kollekcióval paraméterezett add(elem: Object): boolean add. All(c: Collection): boolean Ä Nincs példányosítható remove(elem: Object): boolean implementációja a remove. All(c: Collection): boolean keretrendszerben retain. All(c: Collection): boolean Ä Bejárás iterátorral clear() equals(o: Object): boolean to. Array(): Object[] to. Array(Object a[]): Object[] iterator(): Iterator Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 33
Set interfész (halmaz) Ä Elemei • egyediek • nem rendezettek Ä Implementációja: Hash. Set Sorted. Set interfész (rendezett halmaz) Ä Elemei • egyediek • rendezettek Ä Implementációja: Tree. Set Gábor Dénes Főiskola (IAI) «interfész» Set «interfész» Sorted. Set first(): Object last(): Object comparator(): Comparator head. Set(to. Element: Object): Sorted. Set tail. Set(from. Element: Object): Sorted. Set sub. Set(from. Element: Object, to. Element: Object): Sorted. Set Programozási technológia (Java) - V. / 34
List interfész (lista) Ä Elemei • nem egyediek «interfész» List get(index: int): Object set(index: int, elem: Object): Object • egy meghatározott sorrendben követik add(index: int, elem: Object) egymást • indexelhetők Ä Implementációi: Array. List, Vector, Linked. List, Stack Gábor Dénes Főiskola (IAI) add. All(index: int, c: Collection): boolean remove(index: int): Object index. Of(o: Object): int last. Index. Of(o: Object): int list. Iterator(): List. Iterator list. Iterator(index: int): List. Iterator Programozási technológia (Java) - V. / 35
A Hash. Set osztály – hasítási technika n e o H 0 1 2 Csoportindex . . . t a 6 7 . . . 9 "Hottentotta" karaktereinek hasítása Character kar = new Character('H'); kar. hash. Code() == 72 csoportindex == kar. hash. Code()%10 == 2 Kapacitás: 10 Elemszám: 6 Telítettség: 0. 6 Telítettségi küszöb: 0. 9 Ä Hasítókód (hash. Code, hasítófüggvény) Ä Kapacitás: hasítással előállított csoportok száma Ä Hasítókód normalizálása: csoportindex = obj. hash. Code() % kapacitás Ä Telítettség: elemszám / kapacitás Ä Telítettségi küszöb Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 36
Hasítófüggvény készítésének szabályai Ä Egy objektumnak mindig ugyanazt a hasítókódot kell generálnia Ä o 1. equals(o 2) hash. Code(o 1)==hash. Code(o 2) Ä Egyenletes eloszlásra törekvés Ä Hashset-be beteendő objektumok osztályában (szükség esetén) átírandó metódusok: • hash. Code • equals Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 37
Hash. Set osztály Ä Ä Halmaz (Set interfész implementációja) Megvalósítás: hasítási technikával (hasítótáblával) Gyors műveletek, megjósolhatatlan bejárás Alkalmazás • Egyedi, rendezetlen elemeket tartalmazó kollekció • Nagy elemszám esetén nagyon hatékony! Ä Konstruktorok, metódusok • Hash. Set() Hash. Set(int initial. Capacity, float load. Factor) Hash. Set(Collection c) • String to. String() [elem, . . . ] Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 38
Feladat – Hash. Set. Betuk Kérjünk be konzolról egy karakterláncot! Írjuk ki a benne szereplő betűket ábécérendben (mindegyiket csak egyszer)! Együttműködési diagram szoveg: String char. At() Hash. Set. Betuk Gábor Dénes Főiskola (IAI) add() contains()? betuk: Hash. Set : Character Programozási technológia (Java) - V. / 39
… public class Hash. Set. Betuk { public static void main(String[] args) { Hash. Set betuk = new Hash. Set(); String szoveg = Console. read. Line("Szöveg= "); for (int i=0; i<szoveg. length(); i++) betuk. add(new Character(szoveg. char. At(i))); System. out. println(betuk); } for (char c=0; c<Character. MAX_VALUE; c++) if (betuk. contains(new Character(c))) System. out. print(c); System. out. println(); } Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 40
Feladat – Hash. Torpe Az emberre jellemző a neve és a magassága: e két adattal inicializáljuk őket. Tartsunk nyilván embereket, de két ugyanolyan nevű ember nem szerepelhet a nyilvántartásban! Vegyük nyilvántartásba a hét törpét! Végül listázzuk ki a felvitt emberek adatait (név, magasság) egymás után! Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 41
A 26 felé hasított hét törpe . . . H . . . K . . . M S T . . . V Morgó Szende Hapci Kuka Tudor Szundi Vidor 112 104 122 126 146 128 Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 42
… class Ember { private String nev; private int magassag; public Ember(String nev, int magassag) { this. nev = nev; this. magassag = magassag; } public String get. Nev() { return nev; } public int get. Magassag() { return magassag; } Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 43
public int hash. Code() { if (nev. length() == 0) return 0; return Character. to. Upper. Case(nev. char. At(0)); } public boolean equals(Object obj) { if ((obj != null) && (obj instanceof Ember)) return nev. equals(((Ember)obj). get. Nev()); return false; } Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 44
public String to. String() { return Format. left(nev, 10) + Format. right(magassag, 3); } } // Ember public class Hash. Torpe { public static void main(String[] args) { Hash. Set torpek = new Hash. Set(26); torpek. add(new Ember("Morgó", 112)); torpek. add(new Ember("Szende", 104)); torpek. add(new Ember("Hapci", 122)); Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 45
torpek. add(new Ember("Kuka", 126)); torpek. add(new Ember("Tudor", 126)); torpek. add(new Ember("Szundi", 146)); torpek. add(new Ember("Vidor", 128)); torpek. add(new Ember("Hapci", 100)); // Hatástalan torpek. add(new Ember("Tudor", 128)); // Hatástalan System. out. println("Törpék száma: "+torpek. size()); System. out. println(torpek); } } // Hash. Torpe Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 46
A Tree. Set osztály - Comparator Ä Rendezett halmaz (Sorted. Set interfész impl. ) Ä Megvalósítás: kiegyensúlyozott fával Ä Halmazba tett objektumok összehasonlíthatóak Két eset: • Osztályuk implementálja a Comparable interfészt (természetes össszehasonlítás) • Tree. Set konstruktorában megadunk egy összehasonlító (comparator) objektumot Ä Alkalmazás • Egyedi, rendezett elemeket tartalmazó kollekció • Nagy elemszámnál a keresés nagyon hatékony! Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 47
Konstruktorok, metódusok • Tree. Set() • Tree. Set(Collection c) Tree. Set(Sorted. Set s) • Tree. Set(Comparator comp) • Comparator comparator() Comparator interfész Ä Céljai: • más rendezettség megadása (a természetes rendezettségen túl) • rendezettség megadása kívülről Ä Implementációjának példánya egy összehasonlító objektum, mely átadható a Tree. Set konstruktorának Ä Metódusa • public int compare(Object a, Object b) Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 48
Feladat – Tree. Set. Nevek Tegyünk be keresztneveket egy konténerbe! Ne vigyünk be egyforma neveket! Írjuk ki a neveket először névsor szerint, azután névhosszúság szerinti rendezettségben! import java. util. *; public class Tree. Set. Nevek { public static void main(String[] args) { Tree. Set nevsor = new Tree. Set(); nevsor. add("Soma"); nevsor. add("Jeremiás"); nevsor. add("Janka"); Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 49
// Kiírás névsorban: System. out. println(nevsor); Tree. Set nevek = new Tree. Set(new Comparator() { public int compare(Object a, Object b) { return ((String)a). length() - ((String)b). length(); } } ); nevek. add. All(nevsor); System. out. println(nevek); } } Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 50
Iterátor Ä Ä Ä Iterátor: objektum, mellyel egy kollekció bejárható Egy kollekcióhoz több iterátor is kapcsolható Az iterátor objektum felelős a kollekció helyes bejárásáért Egy kollekció egy iterátorral csak egyszer járható be Iterátor elkérése a coll kollekciótól: Iterator iter = coll. iterator(); Ä Az iterátornak implementálnia kell az Iterator interfészt Iterator interfész • boolean has. Next() • Object next() • void remove() Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 51
Példa: tetszőleges kollekció bejárása iterátorral c: Hash. Set Collection c = new. . . ; iterator() . . . has. Next() next() remove() Iterator iter = c. iterator(); while (iter. has. Next()) { Object current = iter. next(); // (Objektum osztálya)current. üzenet; } Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 52
Feladat – Országok Tegyünk be országokat egy Hash. Set kollekcióba! Listázzuk ki őket először a Hash. Set-be beépített módon, majd egy iterátorobjektum segítségével! import java. util. *; public class Orszagok { public static void main(String[] args) { String[] nevek = { "USA", "Lengyelország", "Nepál", "Magyarország", "Kuba"}; Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 53
Hash. Set orszagok = new Hash. Set(); for (int i = 0; i < nevek. length; i++) orszagok. add(nevek[i]); System. out. println(orszagok); System. out. println("Országok: "); Iterator iter = orszagok. iterator(); while (iter. has. Next()) System. out. println(iter. next()); } } Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 54
A List interfész implementációi «interfész» Iterator Array. List «interfész» List Vector Linked. List Gábor Dénes Főiskola (IAI) Stack «interfész» List. Iterator Programozási technológia (Java) - V. / 55
Array. List Ä Megvalósítás: újraméretezhető tömbbel Vector Ä Megvalósítás: újraméretezhető tömbbel Ä Metódusai szinkronizáltak Linked. List Ä Megvalósítás: kétirányú láncolt listával Stack Ä Speciális vektor Ä Verem adatszerkezetet valósítja meg Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 56
List. Iterator interfész Ä Iterator interfész leszármazottja Ä Segítségével a kollekció mindkét irányban bejárható Ä Listaiterátor elkérése a listától: List. Iterator iter = lista. list. Iterator(); Ä Metódusok • boolean has. Next() boolean has. Previous() • Object next() int next. Index() • Object previous() int previous. Index() • void add(Object obj) void remove() Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 57
Feladat – Linked. List. Test Vigyünk fel szövegeket egy láncolt listába! Ezután listázzuk ki a szövegeket - a felvitel sorrendjében! - visszafelé, s közben töröljük ki az A betűvel kezdődő szövegeket! - s megint elölről! Végül írjuk ki az utolsó szöveget! public class Linked. List. Test { public static void main(String[] args) { Linked. List lista = new Linked. List(); lista. add("Gergő"); lista. add("Anna"); lista. add("Matyi"); Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 58
System. out. println("Listázás előre: "); List. Iterator iter = lista. list. Iterator(); while (iter. has. Next()) System. out. println(iter. next()); System. out. println("n. Listázás visszafelé, közben az "+ "A betűsök törlése: "); while (iter. has. Previous()) { String str = (String)iter. previous(); System. out. println(str); if (str. starts. With("A")) iter. remove(); } Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 59
System. out. println("n. Listázás előre: "); iter = lista. list. Iterator(); while (iter. has. Next()) { System. out. println(iter. next()); } System. out. println("n. Utolsó elem: " + lista. get(lista. size()-1)); } // main } Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 60
«interfész» Map size(): int is. Empty(): boolean remove(key: Object) clear() get(key: Object): Object put(key: Object, value: Object): Object put. All(entries: Map) contains. Key(key: Object): boolean contains. Value(value: Object): boolean key. Set(): Set values(): Collection «interfész» Sorted. Map comparator(): Comparator first. Key(): Object last. Key(): Object Gábor Dénes Főiskola (IAI) A Map és a Sorted. Map interfész Térkép Kulcs-érték párokat tárol Hashtable Hash. Map Tree. Map Programozási technológia (Java) - V. / 61
A Hashtable osztály Ä Map interfész implementációja Ä Rendezetlen térkép, mely kulcs-érték párokat tárol Ä Megvalósítás: hasítási technikával (hasítótáblával) Ä Konstruktorok • Hashtable() • Hashtable(Map entries) • Hashtable(int initial. Capacity, float load. Factor) Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 62
Feladat – Hashtable. Auto Vigyünk fel autók adatait! A rendszámot és a hozzá tartozó autómárkát egy-egy szövegben tároljuk. A rendszám egyedi adat. Ezután - Írjuk ki az autók adatait a Hashtable. to. String által felkínált formában! - Írjuk ki külön a kulcsokat, majd külön az értékeket (autómárkákat)! - Keressük meg a megadott rendszámú autót! Írjuk ki az autó márkáját. - Cseréljünk ki egy megadott rendszámú autó márkáját! - Írjuk ki egyenként, sorszámozva az autók adatait! Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 63
import java. util. *; public class Hashtable. Auto { public static void main(String[] args) { Hashtable autok = new Hashtable(); autok. put("BIT-442", "Piros Romeo"); autok. put("SIT-999", "Fehér Merci"); autok. put("CAR-152", "Zöld Mazda"); // A tejles térkép összes bejegyzésének kiírása: System. out. println(autok); Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 64
// Kulcsok, értékek kiírása: System. out. println("Kulcsok: "+autok. key. Set()); System. out. println("Értékek: "+autok. values()); // Adott kulcsú bejegyzés keresése: String rendszam = "CAR-152"; if (autok. contains. Key(rendszam)) System. out. println(rendszam+" megvan, "+ autok. get(rendszam)); // Csere: autok. put(rendszam, "Fekete Trabant"); Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 65
// Kiírás iterátorral: Iterator iter = autok. key. Set(). iterator(); int n = 0; while (iter. has. Next()) { Object key = iter. next(); System. out. println(++n + ". " + autok. get(key)); } } } Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 66
A Tree. Map osztály Ä Sorted. Map interfész implementációja Ä Rendezett kulcsokat tartalmazó térkép Ä Megvalósítás: kiegyensúlyozott fával (a kulcsok összehasonlíthatók) Ä Konstruktorok • Tree. Map() Tree. Map(Comparator c) • Tree. Map(Map m) Tree. Map(Sorted. Map m) Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 67
Feladat – Tree. Map. User Egy internetszolgáltató tárolni akarja a felhasználók adatait: a felhasználó nevét, jelszavát és a legutóbbi látogatásának időpontját. A használati esetek a következők: - Új felhasználó felvitele - Felhasználók számának kiírása - Felhasználónevek listázása ábécé szerint - A jelszó és a legutóbbi látogatás kiírása a felhasználónév alapján A használati eseteket hajtsuk végre egymás után! Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 68
import java. util. *; import java. text. Date. Format; class User { private String user. Name; // felhasználónév private String password; // jelszó private Date last. Visited; // a legutóbbi belépés időpontja public User(String user. Name, String password) { this. user. Name = user. Name; this. password = password; this. last. Visited = new Date(); // mai dátum } Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 69
public User(String user. Name) { this(user. Name, ""); } public String get. User. Name() { return user. Name; } public String get. Password() { return password; } public String get. Last. Visited() { return Date. Format. get. Date. Time. Instance(). format(last. Visited); } Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 70
public void set. Last. Visited() { last. Visited = new Date(); } public String to. String() { return user. Name+", "+password+", "+get. Last. Visited(); } } // class User Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 71
public class Tree. Map. User { public static void main(String[] args) { Tree. Map users = new Tree. Map(); users. put("Nagybuta", new User("Nagy. Buta", "netuddmeg")); users. put("Bendegúz", new User("Bendegúz", "anyukád")); users. put("Erzsébet", new User("Erzsébet", "kimást")); users. put("Naspolya", new User("Naspolya", "eddmeg")); Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 72
System. out. println("Felhasználók száma: " +users. size()); // Felhasználónevek listázása: System. out. println("n. Felhasználónevek: "); Iterator iter = users. key. Set(). iterator(); while (iter. has. Next()) System. out. println(iter. next()); // Felhasználók adatai: System. out. println("n. Felhasználók adatai: "); Collection values = users. values(); iter = values. iterator(); while (iter. has. Next()) System. out. println(iter. next()); Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 73
// Megadott felhasználó jelszavának kiírása: String user. Name = "Bendegúz"; User user = (User)users. get(user. Name); if (user == null) System. out. println("n. Nincs " + user. Name); else { System. out. println("n" + user. Name + " jelszava: " + user. get. Password() + ", legutóbbi látogatása: " + user. get. Last. Visited()); } } } Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - V. / 74
- Slides: 74