Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

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.

Hasonló előadás


Az előadások a következő témára: "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."— Előadás másolata:

1 Kollekciók IO stream-ek Generikus kollekciók

2  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

3  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

4  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”

5

6  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

7  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();

8  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

9  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…

10  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)

11  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

12  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

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

14

15  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

16  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

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

18  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

19  Mapek.java (honlapom)

20 Puffer kezelése RandomAccessFile osztály StringTokenizer

21 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

22  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!

23  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

24  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)

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

26

27  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 ();

28  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();

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

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

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

32

33  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());

34  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;

35 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

36


Letölteni ppt "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."

Hasonló előadás


Google Hirdetések