Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaBrigitta Takács Megváltozta több, mint 9 éve
1
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 8. gyakorlat
2
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor2Szegedi 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 http://docs.oracle.com/javase/7/docs/api/java/util/StringTokenizer.html Példaprogram: StringTokenizerPelda.java CollectionAndIO.java
3
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor3Szegedi 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(); }
4
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor4Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Standard IO Standard input: System.in Standard output: System.out System.out.println(”Szöveg”); Standard error: System.err System.err.println(”Szöveg”); System.out és a System.err közvetlenül használhatóak Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor4
5
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor5Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Fájlkezelés, IO Adatfolyam alapú megközelítés (amíg van adat olvassuk/amíg van adat írunk, adatfolyam bezárása) InputStream/OutputStream: byte-orientált IO - 8 bites karakter –InputStream: adatforrás-folyam –OutputStream: adatnyelő-folyam Reader/Writer osztályok: karakter-orientált IO (unicode támogatással) - 16 bites karakter Konvertáló osztályok (pl.: InputStreamReader) Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor5
6
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor6Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Importálás IO-hoz A java.io csomag tartalmazza az íráshoz/olvasáshoz szükséges osztályokat import java.io.*; Amiket használunk belőle: (API) –BufferedReader –InputStreamReader –FileReader –FileWriter Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor6 Bővebben: http://docs.oracle.com/javase/8/docs/api/java/io/package-summary.html
7
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor7Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Beolvasás fájlból Scannert is használhatunk (múlt óra) BufferedReader FileReader: karakteres fájlokat olvas –konstruktorában egy File objektumot vár –File f = new File(”fajlnev.txt”); readLine() - egy sort olvas be a fájlból BufferedReader be = new BufferedReader(new FileReader(new File("fajlnev.txt"))); String beolvas = be.readLine(); Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor7
8
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor8Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Kiíratás fájlba FileWriter: karakteres fájlokat ír, egy fájl objektumot/útvonalat (String) vár, ahová ír –megadhatjuk, hogy csak hozzáfűzzön a jelenlegi fájlhoz FileWriter ki = new FileWriter(new File(”textfajl.txt”)); ki.write(”szöveg”); Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor8 Példaprogram: Fajlkezeles.java
9
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor9Szegedi 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
10
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor10Szegedi 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!
11
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor11Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Megjegyzések Új File objektum létrehozásakor \ helyett \\- t kell használni Windows esetén Kiírásnál sortörés \n helyett operációs rendszer specifikusan: –String s = System.lineSeparator(); IO műveletek végén a streameket le kell zárni minden esetben a close() metódus segítségével Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor11 Példaprogram: Fajlkezeles.java
12
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor12Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Ismétlés - tömbök Tömbök előnyei? Hátrányai? Használatuk? –Adott tömbelem elérése? Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor12
13
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor13Szegedi 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
14
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor14Szegedi 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 (múlt óra) (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
15
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor15Szegedi 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
16
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor16Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor
17
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor17Szegedi 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
18
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor18Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Nem generikus kollekciók Bármilyen típust tárolhatunk bennük –Nem szerencsés, csak azonos típusúakat tárolni benne A kollekciók objektumokat tárolnak,nem kell közé kiírni Minden esetben Object típusú objektumot kapunk vissza –Ezt downcastolni kell, ami veszélyes művelet Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor18
19
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 –Korábban csak célszerű volt azonos típusú objektumokat tárolni egy kollekcióban, de így kötelező –meghatározzuk, hogy milyen objektumokat tárolunk benne –rengeteg hibalehetőségtől kíméljük meg magunkat –manapság soha nem használunk NEM generikus kollekciókat Fent emíltett okok miatt
20
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor20Szegedi 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!
21
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor21Szegedi 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();
22
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor22Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Kollekció kezelése Elemek lekérése: –lista.get(index); –A megfelelő típusú, adott helyen lévő objektumot adja vissza List lista = new ArrayList (); Kutya kutyus = new Kutya(); lista.add(1, kutyus); Kutya elsoKutya = lista.get(1);
23
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor23Szegedi 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!)
24
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor24Szegedi 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 = lista.get(i); kutyus.ugat(); } –for-each ciklussal: for ( Kutya kutyuli : lista ) { kutyuli.ugat(); }
25
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor25Szegedi 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)
26
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor26Szegedi 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 Példaprogram: Kollekciok.java, Kollekciok2.java
27
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor27Szegedi 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ó A között meg kell adni először a kulcs típusát, majd az érték típusát 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)
28
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor28Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Map-ek kezelése Egy adott kulcshoz tartozó érték: –map.get(kulcs) - egy adott típusú objektummal tér vissza 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
29
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor29Szegedi 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();
30
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor30Szegedi 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á, amely Entry- ket tartalmaz, adott kulcs-érték típusból –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() egy Map.Entry típusú objektumot ad Példaprogram: Mapek.java
31
Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor31Szegedi 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
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.