Java és web programozás

Hasonló dokumentumok
Java és web programozás

Collections. Összetett adatstruktúrák

Programozási nyelvek Java

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

Programozási technológia

Generikus osztályok, gyűjtemények és algoritmusok

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Dinamikus adatszerkezetek. 2D generikus tömb: C++ 2D generikus tömb: C++

Dinamikus adatszerkezetek. 2D generikus tömb: C++ 2D generikus tömb: C++ 2D tömb: Java versus C++ 2D tömb: Java.

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

Reader /Writer InputStreamReader, OutputStreamWriter

Generikus Típusok, Kollekciók

Tömbök, kollekciók és egyéb alaposztályok

Java osztálykönyvtár és használata

Java tutorial. Object. Nehany alaposztaly, amit ismerni illik. tostring. equals vs. ==

.Net adatstruktúrák. Készítette: Major Péter

OOP: Java 8.Gy: Abstract osztályok, interfészek

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

Java és web programozás

Java és web programozás

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

JNDI - alapok. Java Naming and Directory Interface

J2SE 1.5 Tiger. Bevezetés. Metaadatok. Generikus típus. J2SE 1.5 Tiger. Viczián István (viczian.istvan a gmail-en)

ZH mintapélda. Feladat. Felület

Programozási nyelvek II.: JAVA, 3. gyakorlat

Programozás I. 8. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Abstract osztályok és interface-ek. 7-dik gyakorlat

C#, OOP. Osztályok tervezése C#-ban

Programozási technológia

Programozás II gyakorlat. 8. Operátor túlterhelés

Programozási nyelvek II.: JAVA

Osztályok. 4. gyakorlat

Magas szintű programozási nyelvek 2 Előadás jegyzet

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Programozás alapjai II. (7. ea) C++ Speciális adatszerkezetek. Tömbök. Kiegészítő anyag: speciális adatszerkezetek

Speciális adatszerkezetek. Programozás alapjai II. (8. ea) C++ Tömbök. Tömbök/2. N dimenziós tömb. Nagyméretű ritka tömbök

OOP #14 (referencia-elv)

Programozás alapjai II. (7. ea) C++

Java és web programozás

Generikusok, Collections Framework JAVA PROGRAMOZÁS 5. GYAKORLAT

Programozási nyelvek Java

Programozás II. labor

Java programozási nyelv

Java és web programozás

JAVA SE/ME tanfolyam tematika

Programozási nyelvek Java

3. Osztályok II. Programozás II

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Programozási nyelvek Java

Java Programozás 3. Gy: Java GUI. Swing, AWT

Java programozási nyelv 7. rész Java osztálykönyvtár 1.

Java és web programozás

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Smalltalk 2. Készítette: Szabó Éva

Programozási nyelvek Java

Mi a különbség az extends és az implements között. Mikor melyiket kell használni? Comperable-t megvalósító oasztályokban össze lehet hasonlitani


Elemi adatszerkezetek

C# osztályok. Krizsán Zoltán

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

és az instanceof operátor

Java programozási nyelv 6. rész Java a gyakorlatban

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Programozás II. 4. Dr. Iványi Péter

Objective-C PPKE-ITK

Programozási nyelvek Java

Java és web programozás

Programozási Paradigmák és Technikák

BME MOGI Gépészeti informatika 8.

Adatszerkezetek 2. Dr. Iványi Péter

Java és web programozás

hiányzott szeptemberben vagy A tanuló nem hiányzott szeptemberben szöveget

Torna. A torna.csv UTF-8 kódolású állományban soronként egy versenyző eredményeit tároljuk. Az adatokat pontosvessző választja el egymástól.

A feladat lényege egy felhasználói típusnak a zsák típusnak a megvalósítása.

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

Kalapácsvetés 2016 szöveges

Java gyakorlat feladatai e s megolda sai ( )

Programozási nyelvek II.: JAVA, 11. gyakorlat

Láncolt lista Bináris keresőfa Gráf Hasító táblázat. Programozás II. labor 2. rész (Adatszerkezetek)

Fordított és szkript nyelvek összehasonlító elemzése. Sergyán Szabolcs

Informatikai Kar. 3. fejezet. alapismeretek. Giachetta Roberto

Bevezető. Servlet alapgondolatok

Java és web programozás

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

C++ Standard Template Library (STL)

Sikeres végrehajtás(pass): ez azt jelenti, hogy a teszt rendben lefutott, és az ellenőrzési feltételek mind teljesültek.

Java programozási nyelv 5. rész Osztályok III.

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

A lista adatszerkezet A lista elemek egymásutániságát jelenti. Fajtái: statikus, dinamikus lista.

Újdonságok a Java nyelvben

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

JAVA PROGRAMOZÁS 3.ELŐADÁS

OOP: Java 8.Gy: Gyakorlás

Java és web programozás

Fejezetek az "Effective Java" c. könyvből

Objektumorientált programozás C# nyelven

Osztálytervezés és implementációs ajánlások

Java Programozás 1. Gy: Java alapok. Ismétlés ++

C++ programozási nyelv Konstruktorok-destruktorok

Átírás:

Budapesti M szaki Egyetem 2013. október 2.

4. El adás

Adatszerkezetek A java által deniált adatszerkezetek: Enumeration BitSet Vector Stack Dictionary Hashtable Properties

Adatszerkezetek A java által deniált adatszerkezetek: Enumeration BitSet Vector Stack Dictionary Hashtable Properties Az általunk használt java verzióban ezek már elavult, csak a korábbi verzióval való kód kompatibilitás miatt léteznek. De a jelenlegi adatszerkezetek lényegét ezeken keresztül lehet legjobban átadni.

Enumeration Az Enumeration valójában nem egy adatszerkezet, csak egy interface (késõbb). Gondolhatunk most erre úgy, mint osztályoknak egy tulajdonságára. Azok az osztályok amik implementálják ezt az interface-t képesek az általuk tárolt elemeket egymás után lekérdezni.

BitSet A BitSetre tekinthetünk úgy, mint egy boolean tömbre, ami dinamikusan nõ és csökken, tehát nem kell a méretével törõdnünk. Amikor felveszek egy új elemet a BitSetbe, annak új helyet foglal le. Amikor törlünk akkor sorban felszabadítja az üres helyeket. Hasznos, ha valamilyen bináris tulajdonságot szeretnénk tárolni. Egyszerû példa, ha egy igaz-hamis tesztet teszünk a honlapunkra, ami több oldalból áll. Az oldalak közt tarolnunk kell, hogy a korábbi oldalakon szereplõ kérdesekre mit valaszolt a felhasználó.

Vector A Vector nagyon hasonlít a szokásos tömbre, azzal a kivétellel, hogy dinamikusan változik a mérete, ha új elemeket helyezünk bele, vagy törlünk. Mint egy tömbben is, a Vector elemeit indexen keresztül is elérhetjük. A hasznosságáról azthiszem nem is kell többet mondani, könnyedén lecseréli majdnem az összes tömböt amit eddig használtunk. Az általunk leggyakrabban használt adatszerkezet lesz.

Stack A Stack egy LIFO (last in rst out) megvalósitás. Úgy kell elképzelni, mint a valódi életben is amikor tárgyakat egymásra pakolunk. Mindig a legutolsót amit hozzáadtunk a Stackhez azt tudjuk csak levenni. Ritka esetekben fogjuk használni, vagy az is lehet hogy soha. Viszont fontos, hogy tudjatok a létezésérõl.

Dictionary / Hashtable Ezt a kettõt egyben tárgyalnám. A Dictionary, mint ahogy az Enumeration is, csak egy interface így belõle nem lehet objektumot létrehozni. Viszont meghatározza, hogy milyen tulajdonságokkal kell rendelkeznie egy olyan osztálynak amit Dictionary-ként lehet használni. Azon adatszerkezetek a Dictionary-k, amik kulcsokhoz rendelnek értékeket. Tehát egy tömbbel ellentétben egy adott elemet nem az indexével, hanem a kulcsával tudunk elérni. Például, ha szeretnénk valamilyen gyors módot ahogy le lehet kérdezni userek teljes nevét, akkor vehetnénk a userneveket kulcsként és a teljes nevet értékként. A Hashtable egy konkrét implementációja ennek.

Properties A Properties egy leszármazottja a Hashtable-nek. Annyi speciális van benne, hogy mindig Stringekhez Stringeket rendel hozzá. Azért érdemes külön tárgyalni, mert sok beépített java lekérdezés ilyen objektumot ad vissza. Pl: System.getProperties()

Felejtés Az elõzõ pár diából amit meg kell jegyezni az az ötlet ami mögöttük van, és nem a konkrét elnevezések. A java 2.0 óta ezeket teljesen átírták. Viszont az új megvalósításokat sokkal nehezebb lett volna bevezetni mélyebb java tudás nélkül.

Interface-ek Ezek mind csak interface-ek, tulajdonságok. Nem hozhatunk létre konkrét Set objektumot. Viszont lesznek majd olyan osztályok, amik rendelkeznek valamennyi tulajdonsággal ezek közül, belõlük már létrehozhatunk objektumokat. Amint látható hierarchiába vannak szervezve, mind Collection, és pl a SortedSet egy Set.

Collection Annyit tud, hogy objektumoknak valamilyen csoportját tárolja. List A List rendezetten tárol elemeket. Set A Set egyedi elemeket tárol. SortedSet Rendezett és egyedi elemeket tárol. Map Egyedi kulcsokhoz értékeket rendel SortedMap A kulcsokat rendezetten tárolja. Map.Entry Leír egy kulcs-értek párt. Ez a Mapnek egy belsõ osztálya.

Az osztályok Nem mindet fogom felsorolni, a többinek utána lehet nézni (van sok). Amiket felsorolok az általam gondolt leghasznosabbak, a félév során ezeket fogjuk használni: ArrayList HashSet HashMap

Közös metódusok Ezeket a metódusokat a Collection interface implementálja, így az elõbb említett összes adatszerkezetben mûködnek. Nem sorolok fel minden létezõ metódust, a továbbiakról eclipse-ben is olvashattok. boolean add(object o) A Collection végére beteszi az adott objektumot. boolean addall(collection c) void clear() Az adott Collection összes elemét beteszi a Collectionbe. Törli a Collection tartalmát. boolean contains(object obj) Igazat ad, ha az adott elemet tartalmazza a Collection, hamisat különben. boolean isempty() Üres-e a Collection.

Iterator iterator() Visszaadja a Collection iterátorát (errõl késõbb). boolean remove(object obj) int size() Töröl egy olyan elemet a Collectionbõl ami megegyezik a kapott obj objektummal. Hamisat ad, ha nem volt mit kitörölni. Visszaadja, hogy hány elem található a Collectionben. Object[] toarray() Visszaadja a tárolt elemekbõl készitett tömböt.

ArrayList Ahogy a nevébõl ki lehet találni, ez egy List. Szinte az összes tömbünket le fogjuk cserélni erre. Dinamikusan nõ a mérete, így nem kell foglalkozunk a létrehozásakor azzal, hogy majd hány elem lesz benne. Fontos metódusai: void add(int index, Object element) Az adott indexre berakja az objektumot a már bentlevõket jobbra eltolja. (Nem irja felül az indexen találhato objektumot.) void ensurecapacity(int mincapacity)) Elõre lefoglal legalább ennyi helyet. Ha ezen túlnõ, tovább növeli a tárolt helyet. Object get(int index) Visszaadja az adott indexen tárolt elemet. int indexof(object o) Hanyadik indexen található az adott elem elõször. Object remove(int index) Adott indexû elemet töröl.

void removerange(int fromindex, int toindex) Két index között mindent töröl. Object set(int index, Object element) Lecseréli az adott indexen találhato elemet egy új elemre. import java.util.*; public class ArrayListDemo { public static void main(string args[]) { // create an array list ArrayList al = new ArrayList(); System.out.println("Initial size: " + al.size()); // add elements to the array list al.add("c"); al.add("a"); al.add("e"); al.add("b"); al.add("d"); al.add("f"); al.add(1, "A2");

System.out.println("Size after additions: " + al.size()); // display the array list System.out.println("Contents: " + al); // Remove elements from the array list al.remove("f"); al.remove(2); System.out.println("Size after deletions: " + al.size()); System.out.println("Contents: " + al); } } Eredmény: Initial size: 0 Size after additions: 7 Contents: [C, A2, A, E, B, D, F] Size after deletions: 5 Contents : [C, A2, E, B, D]

HashSet Egy Set, ami hash táblát használ az elemek tárolásához. Azok a metódusai, mint a Collectionnek. import java.util.*; public class HashSetDemo { public static void main(string args[]) { HashSet hs = new HashSet(); // add elements to the hash set hs.add("b"); hs.add("a"); hs.add("d"); hs.add("e"); hs.add("c"); hs.add("f"); System.out.println(hs); } } Eredmény: [D, E, F, A, B, C]

HashMap Hasonlóan mûködik, mint pythonban a dictionary. Szintén hashelés segítségével tárolja az elemeket. Fontos metódusai: boolean containskey(object key) Tartalmazza-e az adott kulcsot. boolean containsvalue(object value) Tartalmazza-e az adott érteket. Object get(object key) Az adott kulcshoz tartozó értéket lekéri. Object put(object key, Object value) Berakja ezt a kulcs-érték párt. Object remove(object key) Az adott kulcsú elemet törli.

import java.util.*; public class HashMapDemo { public static void main(string args[]) { HashMap hm = new HashMap(); // Put elements to the map hm.put("zara", new Double(3434.34)); hm.put("mahnaz", new Double(123.22)); hm.put("ayan", new Double(1378.00)); hm.put("daisy", new Double(99.22)); hm.put("qadir", new Double(-19.08)); } // Get a set of the entries Set set = hm.entryset(); // Get an iterator Iterator i = set.iterator(); // Display elements

} while(i.hasnext()) { Map.Entry me = (Map.Entry)i.next(); System.out.print(me.getKey() + ": "); System.out.println(me.getValue()); } // Deposit 1000 into Zara's account double balance = ((Double)hm.get("Zara")).doubleValue( hm.put("zara", new Double(balance + 1000)); System.out.println("Zara's new balance: " + hm.get("zara")); Eredmény: Zara: 3434.34 Mahnaz: 123.22 Daisy: 99.22 Ayan: 1378.0 Qadir: -19.08 Zara's new balance: 4434.34

Iterátor Elég gyakori, hogy végig szeretnénk futni egy Collection elemein. Például egyenként ki akarjuk õket írni, vagy valami mûveletet végrehajtani rajtuk. Ekkor jönnek szóba az iterátorok Elõször el kell kérni az adott objektumtól az iterátorát, a már említett metódussal.

Iterátor Elég gyakori, hogy végig szeretnénk futni egy Collection elemein. Például egyenként ki akarjuk õket írni, vagy valami mûveletet végrehajtani rajtuk. Ekkor jönnek szóba az iterátorok Elõször el kell kérni az adott objektumtól az iterátorát, a már említett metódussal. Ezek az általános lépések az iterálásra: Elkérjük az iterátort Ciklust készitünk, melynek a feltétele, az iterátor hasnext() metódusa. A cikluson belül az iterátor next() metódusával lekérjük a következõ elemet. Az iterátoroknak van remove() metódusa is, amivel az adott elemet törölhetjük a Collectionbõl.

import java.util.*; public class IteratorDemo { public static void main(string args[]) { ArrayList al = new ArrayList(); al.add("c"); al.add("a"); al.add("e"); al.add("b"); al.add("d"); al.add("f"); // Use iterator to display contents of al System.out.print("Original contents of al: "); Iterator itr = al.iterator(); while(itr.hasnext()) { Object element = itr.next(); System.out.print(element + " "); } System.out.println();

} } Eredmény: // Modify objects being iterated ListIterator litr = al.listiterator(); while(litr.hasnext()) { Object element = litr.next(); litr.set(element + "+"); } System.out.print("Modified contents of al: "); itr = al.iterator(); while(itr.hasnext()) { Object element = itr.next(); System.out.print(element + " "); } System.out.println(); Original contents of al: C A E B D F Modified contents of al: C+ A+ E+ B+ D+ F+

Zárszó Az eddigi kódokban a Collectionjeinknek nem mondtuk meg, hogy mit tarolnak. Ez általában nem jó ötlet. A következõ módon lehet tudatni bármelyik Collectionnel, hogy egy adott dolgot tárol: ArrayList<String> mylist = new ArrayList<String>();

Zárszó Az eddigi kódokban a Collectionjeinknek nem mondtuk meg, hogy mit tarolnak. Ez általában nem jó ötlet. A következõ módon lehet tudatni bármelyik Collectionnel, hogy egy adott dolgot tárol: ArrayList<String> mylist = new ArrayList<String>(); A String helyére persze bármilyen tipust írhatunk, akár általunk írt osztályt is. Sõt, még ezek is megtehetõk, errõl majd késõbb lesz magyarázat: List<String> mylist2 = new ArrayList<String>(); Collection<String> mylist3 = new ArrayList<String>();