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.

Slides:



Advertisements
Hasonló előadás
Koordináták, függvények
Advertisements

Sor láncolt ábrázolással
Weblapkészítési tudnivalók 2: Útmutató az elnevezésekhez Pék Ágnes © 2009.
Tananyag: konzultáció
Programozás III STRING-XML.
C++ programozási nyelv Gyakorlat hét
Ismétlés. Ismétlés: Adatbázisok megnyitása: OPEN DATABASE adatbázis_név OPEN DATABASE ”adatbázis_név elérési útvonallal” Adattábla megnyitása: USE tábla_név.
Tömbök C#-ban.
Programozás III KOLLEKCIÓK 2..
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)
Gyakori hibák C# programozásban
Öröklődés 2..
© 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.
Csala Péter ANDN #4. 2 Tartalom  C# - ban előre definiált típusok  Változók  Változókkal műveletek  Elágazás  Ciklus.
Sztringek.
Adatbázis-kezelés.
Sztringek  Az fscanf() és a fprintf() függvényeknél a %s-es formátumtagot kell használni.  A %s formátumtag az első white space karakterig folytatja,
Bevezetés a Java programozásba
Bevezetés a Java programozásba
7. előadás (2005. április 12.) Láncolt lista File kezelés 1.
Öröklődés Polimorfizmus Csomagok Absztrakt osztályok, interfészek
Fájlkezelés, IO Kivételkezelés Belső osztályok
Osztályok Garbage collection.  általában minden osztálynak vannak adattagjai és/vagy metódusai ◦ adattagok megadása:  [láthatóság] [static] [final]
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.
Tömbök ismétlés Osztályok Java-ban Garbage collection
A CLIPS keretrendszer CLIPS "C" Language Integration Production System.
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.
16. Verem műveletei Kaszab Gábor.
© Kozsik Tamás Csomagok. © Kozsik Tamás A program tagolása Típusdefiníciók (osztályok, interfészek) Metódusok Blokk utasítások Csomagok.
Operációs rendszerek gyakorlat sed, awk parancsok.
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.
J.Zs.Cs.: Vizuális programozás (c) 2010 Vizuális programozás Fájl- és állományrendszer kezelés Névtér: System.IO.
Fájlkezelés Pascalban
1. Gyakorlat - Alapok 1. Írjon konzolprogramot, amely kiírja a “Hello ELTE” üzenetet! Használja a System.out.println() -t! 2. Írjon konzolprogramot, amely.
V. Adatszerkezetek, kollekciók
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
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.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
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 Programozás I. 8. 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
Objektumvezérelt rendszerek tervezése 7. óra – Iterator, State, Interpreter © Szőke Gábor.
V 1.0 ÓE-NIK-AII, Programozás I. Karaktersorozatok Feladatok.
Programozás III KIVÉTEL.
Programozás III KIVÉTEL. KIVÉTELKEZELÉS Hibátlan program nincs!!! eddig hiba esetén leállt a program. Példa ilyen hibákra: ─ ArrayBoundsOfException (tömb.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás I. 7. 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.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 8. gyakorlat.
Informatikai gyakorlatok 11. évfolyam
PHP függvények MySQL adatbázisok kezelésére
Algoritmusok és Adatszerkezetek I.
A CLIPS keretrendszer
Előadás másolata:

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  2 fajta: ◦ Collection: egyéni elemek csoportja ◦ Map: kulcs-adat kettősök csoportja

 ArrayList: ◦ tömbbel megvalósított lista ◦ elérés gyors ◦ beszúrás lassú  LinkedList: ◦ minden csomóponthoz tartozik mutató előre és hátra, valamint az érték („igazi” láncolt lista) ◦ elérés lassabb ◦ beszúrás gyors List (lista)Set (halmaz)  1 elem sosem szerepel benne kétszer (hiába tesszük bele többször is)  HashSet: ◦ hash táblában tárol ◦ keresés gyors  TreeSet: ◦ fastruktúrában tárol  rendezett halmaz

 kulcsokat párosít értékekkel, a kulcsra gyors keresést biztosít  pl.:  kulcs nem ismétlődhet, érték igen  2 fajtája: ◦ HashMap: bejáráskor véletlenszerű a sorrend ◦ TreeMap: bejáráskor meghatározott a sorrend KeyValue ”kutya””Bloki” ”gyumolcs””barack” ”eb””Bloki”

 az ArrayList példáján, de a többire is hasonlóan működik: ArrayList lista = new ArrayList(); lista.add(new Integer(3)); lista.add(4); A kollekcióba csak objektumot tehetünk! autoboxing: primitív típusból a wrapper osztálya segítségével objektumot készít

 hozzáadás a 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 a kollekcióból: ◦ lista.remove(index); ◦ lista.remove(objektum);  a kollekció méretének lekérdezése: lista.size();  a kollekció kiürítése: lista.clear();

 egy objektum lekérése: ◦ lista.get(index); ◦ a kollekcióban minden Object lesz, így kivételkor „vissza kell adnunk” a típusát  típuskényszerítés Kutya kutyus = new Kutya(); lista.add(1, kutyus); Kutya masikKutya = (Kutya) lista.get(1); az Objectet, amit kiveszünk, Kutyára kell kényszeríteni

 a típuskényszerítés „veszélyes művelet”, mivel ClassCastException-t dobhat  mivel tudjuk, mit tettünk bele, így feltehetőleg tudjuk azt is, hogy mire kell majd downcast-olni kivételkor ◦ viszont érdemes csak egy fajta dolgokat beletenni egy kollekcióba (pl. csak Kutya objektumokat, vagy csak Integereket, … stb.), mert különben könnyen összekavarhatjuk a dolgokat downcast-nál ◦ továbbiak: generikus kollekcióknál…

 tartalmaz-e adott objektumot: ◦ lista.contains(objektum); ◦ igazzal tér vissza, ha van benne ilyen objektum, egyébként hamissal  üres-e: ◦ lista.isEmpty(); ◦ igazzal tér vissza, ha a kollekció üres (ettől még létezik a kollekció, csak éppen nincsen benne semmi)

 a kollekció ciklussal is bejárható a lista.size() segítségével, de igazán hatékonyan iterátorral tudjuk bejárni  az iterátoros bejárás előnye: ◦ közben nem (illetve csak ellenőrzött módon: remove metódus) módosítható a kollekció ◦ sokkal gyorsabb, mint ciklussal ◦ nem kell ismernünk a bejárt dolog belső szerkezetét

 létrehozás az ArrayList példáján: Iterator it = lista.iterator();  it.hasNext(): megmondja, van-e még következő elem  it.next(): a következő elemet adja vissza (Objectként) ez a kollekció ad egy iterátort, és csak ezt a kollekciót járhatom be vele

 Kollekciok.java (honlapom)  Kollekciok2.java (honlapom)

 a példában HashMap van, de minden Map-re hasonló HashMap map = new HashMap();  hozzáadás: ◦ map.put(kulcs, érték); ◦ a kulcs és az érték is objektumok (itt is van autoboxing)  1 kulcshoz csak 1 érték tartozhat  több egyforma kulcs nem lehet, érték igen

 azt kérdezhetjük le, hogy adott kulcshoz milyen érték tartozik: ◦ map.get(kulcs); ◦ Objectet ad vissza, itt is downcast-olni kell  adott kulcsot tartalmaz-e: ◦ map.containsKey(kulcs); ◦ igazat vagy hamisat ad vissza  adott értéket tartalmaz-e: ◦ map.containsValue(érték); ◦ igazat vagy hamisat ad vissza

 elemek számának lekérdezése: ◦ map.size();  üres-e: ◦ map.isEmpty();

 csak halmazt tudok iterátorral bejárni, ezért a Map összes bejegyzését lekérem egy halmazba: ◦ map.entrySet();  ehhez a halmazhoz hozhatok létre iterátort: ◦ map.entrySet().iterator(); Iterator it = map.entrySet().iterator();  it.hasNext(): van-e következő elem?  it.next(): a következő elemet adja vissza, ami Map.Entry típusú  erre kell kényszeríteni

 Mapek.java (honlapom)

Puffer kezelése RandomAccessFile osztály StringTokenizer

Writer ki = new FileWriter(new File(”uj.txt”)); ki.write(”a szöveg, amit kiírunk…”); ki.flush; ki.write(”a szöveg további része…”); ki.close();  flush: ürítjük a puffert, tehát amit eddig a write-nak átadtunk, az biztosan kiíródik ◦ elég lassú művelet

 a close() mindenképpen meghívja a pufferürítést is ◦ ha nem fontos azonnal, adott időben kiírni valamit a fájlba, akkor nem feltétlen szükséges a flush()-t használni, mert a lezáráskor úgyis kiíródik minden  a.flush() nem zár le, csak puffert ürít ◦ tehát a close()-ra ilyenkor is szükség van!

 akkor hasznos, ha írni és olvasni is akarunk ugyanabból a fájlból kb. egyidőben  metódusai hasonlók az eddig megszokottakhoz: ◦ read() ◦ readLine() ◦ write() ◦ seek() ◦ close() ◦ …  bővebben: Java API

 segítségével sztringeket darabolhatunk fel részekre  alapértelmezetten 5 esetben darabol: ◦ space ◦ tab ◦ újsor karakter ◦ carriage return ◦ line feed  példaprogram: StringTokenizerPelda.java (honlapom)

 az eddig átvett rész összefoglalása: CollectionAndIO.java (pub)

 Java 1.5-től létezik ilyen  lényege, hogy a kollekcióba csak adott típusú elemet lehessen beletenni ◦ már a Collection-nél is szó volt róla, hogy hasznos ugyanolyan típusú dolgokat tárolni egy kollekcióban, itt ezt kötelezővé is tesszük (meghatározva azt is, mi legyen ez az adott dolog)  olyan lista létrehozása, ami Integereket tárol: ◦ ArrayList lista = new ArrayList ();

 előnye az is, hogy kivételkor nem kell kényszeríteni, mert megőrzi a típust ◦ pl. Integer szam = lista.get(0);  Integert ad vissza, nem Objectet  bejárás: generikus iterátorral ◦ Iterator it = lista.iterator();

 Collection-höz hasonlóan Map is lehet generikus ◦ Map map = new TreeMap ();  bejárás iterátorral: ◦ Iterator > it = map.entrySet().iterator();

 a kollekciók, mapek egymásba ágyazhatók  pl.: ◦ HashMap m = new HashMap (); ◦ HashMap > m = new HashMap >();

 CollectionsAndIOGenerics.java (pub)  GenerikusKollekciok.java (honlapom)

 függvények segítségével kezelhető a String hossza, tartalma 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());

 szerda éjfélig küldhető el 2 pluszpontért nekem e- mailben Feladat:  Írj egy Kutya osztály, mely a következő privát adattagokat tartalmazza: név, fajta, életkor. o Írj az osztályhoz paraméteres konstruktort, valamint getter-setter metódusokat! o Definiáld felül az osztályban a toString metódust!  Írj egy KutyaMenhely nevű futtatható osztályt. o Olvasd be egyetlen String változóba a menhely.txt fájl tartalmát, ami a következő formában tartalmazza a kutyák adatait (tetszőleges számú sort tartalmazhat, hogy pontosan mennyit, arról előre nincsen információnk): Blöki;magyar vizsla;2; Pamacs;puli;1; Rex;német juhász;3;

o StringTokenizer segítségével darabold fel a beolvasott Stringet a pontosvesszők mentén, és minden újabb hármas alapján hozz létre Kutya objektumokat o A létrehozott Kutya objektumok valamilyen kollekcióba kerüljenek bele o Végül járd be a kollekciót iterátor segítségével, és írasd ki a konzolra a kollekcióban levő objektumokat