1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 8. gyakorlat.

Slides:



Advertisements
Hasonló előadás
Sor láncolt ábrázolással
Advertisements

1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Adatbázisok gyakorlat 5. gyakorlat Adatmodellezés III/IV – Funkcionális függés,
Programozás III STRING-XML.
C++ programozási nyelv Gyakorlat hét
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Adatbázisok gyakorlat 8. gyakorlat SQL alapok.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Adatbázisok gyakorlat 2. gyakorlat MySQL elérése számítógépen (JDBC, ODBC, PHP)
Tömbök C#-ban.
Programozás III KOLLEKCIÓK 2..
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Adatbázisok gyakorlat 6. gyakorlat Gyakorlás, kötelezőprogram.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Adatbányászati technikák (VISZM185)
© Kozsik Tamás Tömbök, kollekciók és egyéb alaposztályok.
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Bevezetés a Java programozásba
Bevezetés a Java programozásba
Kollekciók IO stream-ek Generikus kollekciók.  objektumokat tartalmaznak  nincsen előre meghatározott méretük, bármennyi objektumot pakolhatok beléjük.
Fájlkezelés, IO Kivételkezelés Belső osztályok
Abstract osztályok és interface-ek Beolvasás és kiíratás 7. gyakorlat.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 9. Gyakorlat Alap file műveletek.
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Parancssori argumentumok Primitív típusok Operátorok Vezérlési szerkezetek Tömbök Ürmös Beáta, 2011.
Az objektum-orientált tervezési alapelvek kritikai vizsgálata
A C++ programozási nyelvSoós Sándor 1/14 C++ programozási nyelv Gyakorlat hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
Adatbázis-kezelés ACCESS program:
A C++ programozási nyelvSoós Sándor 1/15 C++ programozási nyelv Gyakorlat hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
A C++ programozási nyelvSoós Sándor 1/12 C++ programozási nyelv Gyakorlat - 8. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
A JAVA TECHNOLÓGIA LÉNYEGE Többlépcsős fordítás A JAVA TECHNOLÓGIA LÉNYEGE Platformfüggetlenség.
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék
P ROGRAMOZÁS I/O műveletek. S YSTEM.C ONSOLE A programjainknak fontos része a felhasználóval való kommunikáció. Adatokat kell kérni tőle, vagy közölnünk.
Emlékezés Somodi Józsefre, egy konstruktőr zsenire
Összetett adattípusok
Listák, Vermek és Várakozási Sorok. Listák Pl: Kirándulók listája Bevásárló lista Alma Kenyér Krumpli Szappan Mosópor Bevásárló lista.
Adatszerkezetek 1. előadás
Fájlkezelés Pascalban
V. Adatszerkezetek, kollekciók
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Scala KOVÁCS VINCENT. Gyűjtemények – Collections  Scala több féle gyűjteménnyel rendelkezik:  Listák (Lists)  Halmazok (Sets)  Maps  Tuple  A gyűjtemények.
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Adatbázisok gyakorlat 10. gyakorlat SQL SELECT, Összekapcsolás, Nézettáblák.
Adatbázisok gyakorlat
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 7. gyakorlat.
Java programozási nyelv Filekezelés
Java programozási nyelv Metódusok
Java programozási nyelv Adatbekérés konzolról
Generics Krizsán Zoltán. Bemutató A.NET 2.0 verziótól. A.NET 2.0 verziótól. Típusparaméter Típusparaméter Más nyelvben ez a template (sablon). Más nyelvben.
Egyenesvonalú (lineáris) adatszerkezetek
Objektum orientált programozás
Webprogramozó tanfolyam
Objektumvezérelt rendszerek tervezése 7. óra – Iterator, State, Interpreter © Szőke Gábor.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
Programozás I. 3. gyakorlat.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 5. gyakorlat.
Fájlszervezés Adatbázisok tervezése, megvalósítása és menedzselése.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás I. 3. gyakorlat.
Számítógépes Grafika 3. gyakorlat Programtervező informatikus (esti)‏ 2009/2010 őszi félév.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 6. gyakorlat.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 8. gyakorlat.
Informatikai gyakorlatok 11. évfolyam
TÁMOP /1-2F Informatikai gyakorlatok 11. évfolyam Kivételek kezelése, ellenőrzött adatbevitel Czigléczky Gábor 2009.
PHP függvények MySQL adatbázisok kezelésére
Algoritmusok és Adatszerkezetek I.
Informatikai gyakorlatok 11. évfolyam
Java alkalmazások 4. Előadás.
Előadás másolata:

1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 8. gyakorlat

Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor2Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Kollekciók objektumokat tartalmaznak Előnyei: –a tömbbel szemben itt nincs meghatározott méretük, bármennyi objektumot pakolhatunk bele –hatékonyabb fejlesztés (gyorsabb is) –kész, hatékony kereső, rendező algoritmusok Fajtái: –Collection: Set, List, Queue –Map: SortedMap

Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor3Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor List Listák (konkrét megvalósítások) - Egy elem többször is szerepelhet benne –ArrayList: tömbbel megvalósított lista elemek elérése gyors (konstans idő) beszúrás lassú –LinkedList: láncolt lista (minden csomóponthoz tartozik egy mutató előre és hátra, valamint az érték) elérése lassabb beszúrás gyorsabb mint az ArrayList-nél

Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor4Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Set Egy elem nem szerepel benne többször (hiába tesszük bele többször) HashSet –hash táblában tárol –keresés gyors TreeSet –fastruktúrában tárol  mindig(!) rendezett a halmaz

Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor5Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor

Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor6Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Map Kulcs-érték párok (kulcsokat párosít értékekkel) A kulcsokra gyors keresés biztosított Kulcs nem ismétlődhet, de érték igen! Fajtái –HashMap: bejáráskor véletlenszerű sorrend –TreeMap: bejáráskor meghatározott sorrend piros-fekete fa

Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor7Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Kollekció kezelése Kollekció létrehozása az ArrayList példáján (de a többi is hasonló): List lista = new ArrayList(); lista.add(new Integer(3)); lista.add(4); // Wrapper objektum képződik! Kollekcióba csak objektumot tehetünk!

Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor8Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Kollekció kezelése Hozzáadás kollekcióhoz: –lista.add(objektum); –lista.add(index, objektum); –ha nem adunk meg indexet, akkor értelemszerűen a következő üres helyre teszi! Törlés: –lista.remove(objektum); –lista.remove(index); Kollekció mérete: lista.size(); Kollekció kiürítése: lista.clear();

Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor9Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Kollekció kezelése Elemek lekérése: –lista.get(index); –Object objektumot ad vissza –Downcastolni kell a megfelelő típusra  típuskényszerítés Kutya kutyus = new Kutya(); lista.add(1, kutyus); Kutya masikKutya = (Kutya) lista.get(1);

Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor10Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Típuskényszerítés „Veszélyes művelet” lehet, mivel ClassCastException-t dobhat De mivel tudjuk mit tettünk bele, így tudjuk azt is, mivé kell castolni a kivett elemet –Emiatt érdemes csak egy fajta objektumot tárolni egy kollekcióban (pl. csak Kutya objektumokat, csak Stringet, stb) –Különben könnyen összekavarhatjuk a dolgokat downcastnál –Generikus kollekciók(!)...

Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor11Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Kollekció kezelése A kollekció tartalmaz-e egy adott objektumot: –lista.contains(objektum) - igazzal tér vissza, ha benne van az elem a kollekcióban Üres-e egy adott kollekció: –lista.isEmpty() - igazzal tér vissza, ha üres (létezik a kollekció, de nincs benne elem!)

Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor12Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Kollekció kezelése Lista bejárása for ciklussal: –„hagyományos” módon: for int i = 0; i < lista.size(); i++) { Kutya kutyus = (Kutya) lista.get(i); kutyus.ugat(); } –for-each ciklussal: for ( Object kutyuli : lista ) { Kutya k = (Kutya) kutyuli; k.ugat(); }

Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor13Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Bejárás iterátorral Igazán hatékony bejárást biztosít Előnyei: –sokkal gyorsabb, mint a „mezei” ciklus használata –nem kell ismernünk a bejárt dolgok belső szerkezetét –használatával csak ellenőrzött módon módosítható a kollekció (remove() metódus)

Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor14Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Bejárás iterátorral Az előző lista példáján hozzunk létre egy iterátort Iterator it = lista.iterator(); it.hasNext() : megmondja, hogy van-e következő elem it.next() : a következő elemet adja vissza (Objectként) Példaprogram: Kollekciok.java, Kollekciok2.java

Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor15Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Map-ek kezelése A példában HashMap van, de minden Map-re hasonló Map map = new HashMap(); Hozzáadás: –map.put(kulcs, érték); –a kulcshoz és az értékhez is egy-egy objektumot vár (van autoboxing) –több azonos kulcs nem lehet! (de érték igen)

Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor16Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Map-ek kezelése Egy adott kulcshoz tartozó érték: –map.get(kulcs) - egy Object típusú objektummal tér vissza, castolni kell Egy adott kulcsot tartalmaz-e –map.containsKey(kulcs) - igaz, ha tartalmazza a Map az adott kulcsot Egy adott értéket tartalmaz-e: –map.containsValue(kulcs) - igaz, ha tartalmazza a Map az adott kulcsot

Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor17Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Map-ek kezelése Adott Map méretének lekérdezése: –map.size(); Adott Map üres-e –map.isEmpty(); - igaz, ha a Map üres (de ettől még létezik, csak nincs benne elem!) Adott Map kiürítése: –map.clear();

Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor18Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Bejárás iterátorral Közvetlenül Map-et nem lehet bejárni iterátorral, ezért át kell alakítanunk halmazzá: –Set mSet = map.entrySet(); Ezek után létrehozhatunk ennek a halmaznak egy iterátort: –Iterator iter = mSet.iterator(); –Iterator iterMas = map.entrySet().iterator(); –az iter.next() által visszaadott objektumot Map.Entry típusra kell kényszeríteni Példaprogram: Mapek.java

Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor19Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Generikus kollekciók Java 1.5-től létezik (Jelenleg Java 1.8) Lényege, hogy egy kollekcióban csak adott típusú elemeket tároljunk –A Collection-öknél is szó volt róla, hogy célszerű azonos típusú objektumokat tárolni csak, de így kötelezővé tesszük –meghatározzuk, hogy milyen objektumokat tárolunk benne –rengeteg hibalehetőségtől kíméljük meg magunkat –manapság nem igazán használunk NEM generikus kollekciókat

Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor20Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Generikus kollekciók Integereket tároló lista: –List intList = new ArrayList (); Előnye, hogy listából való kivételkor nem kell típuskényszerítenünk: –Integer a = intList.get(2); //Integert ad vissza, nem Object-et Bejárás generikus iterátorral – Iterator it = intList. iterator();

Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor21Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Generikus kollekciók Bejárás for ciklussal: for(int i=0; i < intList.size(); i++) { Integer a = intList.get(i); //Nincs downcast } Bejárás for-each ciklussal: for(Integer myInt : intList) { Integer a = myInt; //Nincs downcast }

Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor22Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Generikus Map-ek A kollekciókhoz hasonlóan Map is lehet generikus: –Map map = new HashMap (); Bejárás iterátorral (hasonlóan mint a „sima” Map) –Iterator > it = map.entrySet().iterator();

Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor23Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Egymásba ágyazhatóság A Map-eket, illetve a kollekciókat egymásba is ágyazhatjuk, néhány példa: –HashMap m = new HashMap (); –HashMap > m = new HashMap >(); Példaprogram: CollectionsAndIOGenerics.java GenerikusKollekciok.java

Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor24Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Puffer kezelése Writer ki = new FileWriter(new File("uj.txt")); ki.write("szöveg, valami blabal"); ki.flush(); ki.write("Másvalami szöveg, valami blabal"); ki.close(); flush() metódus: Ürítjük a puffert, azaz, amit eddig átadtunk neki, az biztosan kiíródik a fájlba –lassú művelet

Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor25Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Puffer kezelése a close() által mindenképpen meghívásra kerül a puffert kiürítő függvény –Ha nem szükséges azonnali, adott időbeni kiírás, akkor nem szükséges flush()-t használnunk, hiszen a close() meghívásakor minden kiíródik –ennek feltétele viszont, hogy a close()-t használni kell –a flush() nem zár le, csak puffert ürít, így a close()-ra mindenképpen szükség van!

Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor26Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor RandomAccessFile osztály Hasznos, ha ~egyidőben szeretnénk olvasni, és írni egyazon fájlból/fájlba Metódusai hasonlóak az eddigiekhez: –read() –readLine() –write() –close() Bővebben:

Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor27Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor StringTokenizer osztály Stringeket darabolhatunk fel vele részekre Alapértelmezetten 5 esetben darabol: –Szóköz –Tab –Újsor karakter –Carriage return (kocsi vissza) karakter –Line feed Példaprogram: StringTokenizerPelda.java CollectionAndIO.java

Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor28Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor StringTokenizer osztály Létrehozás: –String s = ”sor amit tordelni kell”; –StringTokenizer st = new StringTokenizer(s); Egyéni karakter mentén történő darabolás: –st = new StringTokenizer(s, ”;”); Bejárás while ciklussal a legegyszerűbb: while(st.hasMoreElements()) { String resz = st.nextElement().toString(); }

Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor29Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Stringek hatékony összefűzése függvények segítségével kezelhető a String hossza, tartalma StringBuffer (szinkronizált), StringBuilder A sima Stringek + jellel való konkatenálása is StringBuffer-re fordul le. StringBuffer szoveg= new StringBuffer(); szoveg.append("első rész"); szoveg.append("fűzzük hozzá ezt is").append("meg ezt is"); System.out.println(szoveg.toString());