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
intArray = new ArrayList();
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.