9. gyakorlat
Input, output A Java adatfolyamokkal dolgozik (stream). [Ez olyan objektum, ahova tesszük vagy kapjuk az adatot úgy, hogy nem kell foglalkozunk a file-al, hálózattal,stb.] 2 típusa van: InputStream - adatforrás OutputStream adatnyelő
Reader / Writer A legtöbb Java adatfolyam osztálynak (Java 1.0) megvan a megfelelő Reader /Writer párja (Java 1.1) Pl: InputStreamReader, OutputStreamWriter
Megfeleltetések InputStream Reader OutputStream Writer FileInputStream FileReader FileOutputStream FileWriter StringBufferInputStream StringReader ByteArrayInputStream CharArrayReader ByteArrayOutputStream CharArrayWriter PipedInputStream PipedReader PipedOutputStream PipedWriter
Standard I/O Unix fogalom standard input: a program bemenete (System.in) standard output: a program kimenete (System.out) standard error: a program hiba kimenete (System.err) A System.out és System.err PrintStream típusú objektumok, ezért közvetlenül használhatóak
Példa InputOutput.java
Konténerek A konténer osztálykönyvtár egyike a leghatékonyabb programozási eszközöknek Java 2-ben teljesen újratervezték a Java 1.x verziókban nagyon gyengére sikeredett Java 5-ben kibővítették generikus típusokra Két koncepció Kollekció (Collection): Egyéni elemek csoportja, általában valamilyen szabályossággal (listában sorrendiség, halmazban egyediség, stb.) Leképezés (Map): Kulcs-adat kettősök csoportja, a kulcsra gyors keresést biztosít
Lista adatszerkezet List (interfész) Elemeket tárol adott sorrendben ListIterator oda-vissza be lehet járni a listát és be lehet szúrni elemeket a listába elemek közé is ArrayList Tömbbel megvalósított lista, gyors elérés de lassú beszúrás/törlés LinkedList Igazi láncolt lista, gyors beszúrás/törlés de lassú elérés, plusz metódusok, hogy használható legyen stack-, queue- és dequeként: addfirst(), addlast(), getfirst(), getlast(), removefirst(), removelast()
Halmaz adatszerkezet Set (interfész) Egyedi elemeket tárol sorrendiség nélkül, a tárolt elemeknek felül kell definiálni az equals()-t HashSet Gyors keresést biztosító halmaz, a tárolt elemeknek érdemes felüldefiniálni a hashcode() metódust (hatékonyság miatt) TreeSet Rendezett halmaz (fával megvalósított)
Leképezés adatszerkezet Map (leképezés) Kulcs-adat objektum-párok csoportja, a kulcsra gyors keresést biztosít HashMap Hash-táblával implementált, keresésre/beszúrásra optimalizálva TreeMap Piros-fekete fával implementált, rendezetten tárolja az elemeket
A Java 5 előtti kollekciók hiányossága Elveszítik a típust mindig Object-eket tárolnak általános célúak nem tárolhatnak specifikus típusú objektumokat Bármi belerakható nincs típusellenőrzés csak az Object referencia kerül bele (upcast) Downcast-olni kell az elemet használat előtt!
Generikus kollekciók Típust adunk a kollekcióknak. Csak egyfajta típusú elem rakható bele Nincs Object-re konvertálás. Szintaxis: Kollekció< Típus > referencianév = new Kollekció< Típus >(); Pl: ArrayList<String> stringarray = new ArrayList<String>();
Iterátor Egy iterátor egy objektum, amely végighalad egy objektumsorozaton anélkül, hogy a felhasználó programozó tudná, hogy milyen konkrét belső struktúrája van a kollekciónak Java iterátor tudása: Kérni lehet egy Iterator objektumot a konténertől az iterator() metódushívással Kérni lehet a következő elemet a next() metódussal (a legelsőt is next()-tel kérjük!) Meg lehet kérdezni, hogy maradt-e még elem a sorozatban a hasnext() metódussal Törölni lehet az iterátorral lekért elemet remove()-val
Iterator példa ArrayList<Integer> intarray = new ArrayList<Integer>(); for ( int i = 0; i < 10; i++ ){ intarray.add( new Integer( i ) ); } for ( Iterator it = intarray.iterator(); it.hasnext(); ){ System.out.println( it.next() ); }
template-ek Lehetőség van olyan osztályok írására, melyek bizonyos attribútumai típustalanok. Példányosításnál kell megadni a típust, fordításkor jönnek létre ezek az osztályok.