Java osztálykönyvtár és használata



Hasonló dokumentumok
Java programozási nyelv 7. rész Java osztálykönyvtár 1.

Collections. Összetett adatstruktúrák

Programozás III CSOMAGOK. Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek.

3. Gyakorlat Ismerkedés a Java nyelvvel

Java és web programozás

Java és web programozás

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Magas szintű programozási nyelvek 2 Előadás jegyzet

JAVA SE/ME tanfolyam tematika

Java programozási nyelv

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Programozási nyelvek Java

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java


Bevezetés a Programozásba II 11. előadás. Adatszerkezetek megvalósítása. Adatszerkezetek megvalósítása Adatszerkezetek

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Segédanyag: Java alkalmazások gyakorlat

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

JAVA PROGRAMOZÁS 3.ELŐADÁS

Programozás II. labor

Objektumorientált programozás C# nyelven

Java IX. telkezelés a Java-ban

Java IX. telkezelés a Java-ban

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Java programozási nyelv 6. rész Java a gyakorlatban

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Objektumorientált programozás C# nyelven III.

Szervlet-JSP együttműködés

Dinamikus adatszerkezetek. 2D generikus tömb: C++ 2D generikus tömb: C++

Dinamikus adatszerkezetek. 2D generikus tömb: C++ 2D generikus tömb: C++ 2D tömb: Java versus C++ 2D tömb: Java.

Tömbök, kollekciók és egyéb alaposztályok

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Programozási nyelvek Java

Programozás I. Második ZH segédlet

Java tutorial. Object. Nehany alaposztaly, amit ismerni illik. tostring. equals vs. ==

A Java nyelv. Bevezetés, alapok Elek Tibor

Java és web programozás

Bánsághi Anna

Reader /Writer InputStreamReader, OutputStreamWriter

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

Osztályszintű elérés, kivételkezelés, fájlkezelés

A Jáva programozási nyelv rejtelmei

Programozási technológia

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

Programozási technológia

Programozás I. Második ZH segédlet

Mi a különbség az extends és az implements között. Mikor melyiket kell használni? Comperable-t megvalósító oasztályokban össze lehet hasonlitani

Programozási Paradigmák és Technikák

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Előszó. Bevezetés. Java objektumok leképzése relációs adatbázisokra OJB-vel Viczián István Viczián István

Programozás I. 8. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Java programozási nyelv 9. rész Kivételkezelés

A JAVA nyelv. A JAVA program osztályok (objektumok) összessége. Az osztályok adattagokból és metódusokból állnak. Kód csak metódusokban fordulhat elı.

A Java és a C++ összehasonlítása

Objektum orientált programozás Java-ban

117. AA Megoldó Alfréd AA 117.

Generikus osztályok, gyűjtemények és algoritmusok

Eseményvezérelt alkalmazások fejlesztése II 12. előadás. Objektumrelációs adatkezelés (ADO.NET) Giachetta Roberto

C# gyorstalpaló. Készítette: Major Péter

Generikus Típusok, Kollekciók

Szoftvertechnológia alapjai Java előadások

Programozás III BEVEZETÉS. Sok adatkezeléssel kapcsolatos feladat van. a/ Adatok fájlban. b/ Adatbázisban

Kivételkezelés, naplózás. Exception handling, logging

Informatika terméktervezőknek

Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - I. / 1

A Java programozási nyelv

Programozási nyelvek II.: JAVA

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

Bevezetés a Java programozási nyelvbe

C#, OOP. Osztályok tervezése C#-ban

C# osztályok. Krizsán Zoltán

Bevezetés a Java programozási nyelvbe

OOP: Java 8.Gy: Abstract osztályok, interfészek

Emlékeztető: a fordítás lépései. Szimbólumtábla-kezelés. Információáramlás. Információáramlás. Információáramlás.

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

PHP5 Új generáció (2. rész)

Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben

A Java nyelv IV. rész - appletek, hálózati alkalmazások fejlesztése

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Java Programozás 1. Gy: Java alapok. Ismétlés ++

C# versus Java. Óbudai Egyetem, Java Standard Edition Mérnök Informatikus szak, BSc Labor 3. Bedők Dávid v0.4


JavaServer Pages (JSP) (folytatás)

Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

Az új be- és kimenet könyvtár

S ha kettészelik is: balfelöl belőle Valamivel mindig - Valamivel mindiq több marad. (Nyugat )

Java. JIT (Just in Time) fordítók alkalmazása, optimalizálás AOT (Ahead of Time) fordítók alkalmazásának lehetősége

abkezel.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.sql.*; public class abkezel extends JFrame {

Utasítások. Excel VII. Visual Basic programozás alapok. A Visual Basic-kel megoldható feladatok típusai Objektumok, változók Alprogramok

Bevezetés a C++ programozási nyelvbe

Az emelt szintű. informatika érettségi. programozási feladatainak. megoldása Java nyelven. NetBeans IDE 8.1 környezetben

Java gyakorlat feladatai e s megolda sai ( )

Adatbázisok webalkalmazásokban

Programozás I. Első ZH segédlet

A Java nyelv. Java programozás alapjai. Hello world futtatása. Java adattípusok. Egyszerű adattípusok.

Objektumorientált programozás C# nyelven

Átírás:

3. óra Java osztálykönyvtár és használata Csomagok Kivételkezelés Osztálykönyvtárak és használatuk legradi.gabor@nik.bmf.hu szenasi.sandor@nik.bmf.hu

Java osztálykönyvtár és használata Témakörök Csomagok Kivételkezelés Osztálykönyvtárak használata 2

Csomagok definiálása Csomagok célja: a szoftvertervezés és a szoftverfejlesztés támogatása, a program megfelelő tagolásának elérése Csomagtípusok Névtelen csomag: a fejlesztés induló fázisában, még nem importálható más csomagokból (csak szintén névtelenből látható és érhető el) Névvel ellátott (nevesített) csomag: a már letisztult kód tárolására, valamint hierarchia kialakítására, és az egyértelműség fenntartására (a Pauli-féle tilalmi elv itt is érvényes!) A névvel ellátott csomag elején a package direktíva után adjuk meg a csomagunk nevét (a hierarchiának megfelően), névtelen csomagnál ez a direktíva hiányzik 3

Csomagok importálása Fordítási egység: olyan önálló kódrészlet, amely önmagában is lefordítható A csomagdefiníció fordítási egységek logikai, de nem feltétlenül fizikai halmaza, azaz egy csomagba több különböző fájlban elhelykedő, de azonos csomagba deklarált programegység tartozik Egy fordítási egység csak egy csomaghoz tartozhat A csomagot felhasználó programegységben szerepelnie kell az import direktívának, amely argumentumaként az importálandó csomag nevét tartalmazza Például: Konrét osztály importálása: import java.awt.frame; Igény szerinti importálás: import java.awt.event.*; Megjegyzés: az importálás nem rekurzív folyamat 4

Csomagok tervezése A programban felhasznált csomagokat a kód elején, a csomagdeklarációs direktíva után kell felsorolni, hatása csak az adott programegységre vonatkozik A csomagnevek hierarchikus kialakítása csak laza logikai kapcsolatot jelent A csomagnevek kiválasztásánál ügyeljünk arra, hogy a csomagnév átgondolt legyen A Java-rendszer tartalmaz gyári csomagkészletet (Java API), amelyet a programjainkban felhasználhatunk, és újabb csomagokkal is bővíthetünk 5

Csomagok tárolási lehetőségei Alkönyvtárba kódolt megoldás Ekkor a csomagnév egy kiindulási ponttól kezdve az adott alkönyvtárstruktúrával azonos, a futtató rendszer számára kiindulási helye(ke)t a CLASSPATH rendszerváltozó tartalmazza Lehetséges ennek az alkönyvtár struktúrának a tömörített módú tárolása is (pl. ZIP állományban vagy Java-archívumban, azaz JAR fájlban) Tehát a package sajat; direktívával lefordított állományt a futtató rendszer az alábbi helyeken keresi: a sajat alkönyvtárban a CLASSPATH által definiált könyvtárak sajat alkönyvtárban a CLASSPATH által definiált zip/jar fájlok sajat alkönyvtárban Adatbázisba kódolt megoldás Ekkor a csomagok kezelését, tárolását és visszakeresését egy adatbáziskezelő rendszer végzi el 6

Feladat 3.1. feladat: Készítsünk saját csomagokat, s írjunk meg az őket felhasználó programot is! A csomagokban szereplő osztályok között legyen névütközés! 3.2. feladat: Próbáljuk meg a programot egy másik helyre átmásolva futtatni, értelemszerűen felépítve a csomag hierarchiát többféleképpen (alkönyvtárak, tömörített fájlok)! 7

Java osztálykönyvtár és használata Témakörök Csomagok Kivételkezelés Osztálykönyvtárak használata 8

Kivételkezelés folyamata Célja: megbízható programtermékek létrehozásának támogatása, a futásidejű hibák felismerésének, feltárásának és kijavításának biztosítása Futásidejű hiba: a program futása során, a forráskód alapján tervezhető és elvárható működéstől való eltérés Futásidejű hibák felismerését a JVM végzi Az ilyen módon felmerülő problémák megoldási lehetőségei a program normál üzemű működésének helyreállítása amennyiben ez sem lehetséges, úgy a program minimális vérveszteséggel történő leállásának biztosítása A kivételkezelés előnyei A hibakezelő kód jól elkülönül a tényleges kódtól A hiba könnyen eljut oda, ahol kezelni kell A hibatípusok csoportosíthatók 9

Kivételkezelés folyamata Kivétel keletkezésének módjai A program futása során rendellenes dolog történik (ez a program tetszőleges pontján előfordulhat) A program egy throw utasítást hajt végre (kivételt dob) Aszinkron hiba lép fel (többszálú alkalmazás esetén az egyik programszál futása megszakad) A hibát okozó metódus felfüggesztődik, és a JVM a megfelelő kivételkezelőt megkeresi (kivétel kezelő kódblokk) A kivételkezelő kódblokk megfelelő, ha: a kezelő által kezelt kivétel megegyezik a kiváltott kivétellel vagy őse annak az osztályhierarchiában A kivételkezelők egymásba ágyazhatók (kivételkezelés alatt is keletkezhet kivétel) 10

Kivételkezelés folyamata Kivétel elkapása: ha a JVM megtalálta a kivételkezelő kódblokkot, a kódblokk megkapja a kivételobjektumot feldolgozásra A kódblokk: felderítheti a kivétel okát kezelheti a problémát továbbíthatja a kivételt (akár más típusú kivételt is kelthet) A kivétel kezelése után a vezérlés a kivételkezelő kódblokkot követő utasításnál folytatódhat (és nem a kivételt kiváltó utasítások után) A Java kivételkezelés tulajdonságai Objektum-orientált Bővíthető 11

Kivételek típusai Ellenőrzött kivételek Ha egy metódus a fejlécében jelzi, hogy elképzelhető ilyen kivétel dobása, akkor az összes hívásánál kötelező a programot felkészíteni a kivétel kezelésére (vagy a hívó metódusnak is jelölnie kell a kivétel továbbítását) A java.lang.exception osztályból származnak Nem ellenőrzött kivételek Az előzővel ellentétben ezeket a kivételeket nem kötelező elkapni (hasonlóan a C# kivételekhez) Két ősből is származhatnak: java.lang.error Kritikus hibák, pl. nincs elég memória (a programon belül bárhol előfordulhatnak, és igazából ellenszer sincs ellenük) java.lang.runtimeexception Szintén gyakran előforduló kivételek, amelyeket tervezési okokból nem kötelező kezelni, mert olvashatatlanná tennék a programkódot 12

Kivételkezelés Java nyelven A kivételkezelés módjai: A try-catch blokk alkalmazása, A try-catch blokk alkalmazása finally kiegészítéssel, A kivételkezelés elhalasztása a kivétel specifikálásával A kivételkezelő blokk alkalmazása: try { // gyanús utasítássorok } catch(kivételosztály kivételreferencia) { // ide kerül a kivételt kezelő kódrész } finally { // ide kerülő kódrészlet mindig lefut } 13

Megjegyzések Egytry blokkhoz több, egymás után következőcatch ág is tartozhat (ha több különböző lehetséges kivétel is keletkezhet a try blokkon belül) Több catch blokk esetén az első, a megadott kivételt kezelni képes blokk fut le A kivételosztályok között van lehetőség az Exception osztály alkalmazására is, mivel ez minden kivétel őse, ezért ez bármelyik kivétel esetén lefuthat Mivel az Exception osztállyal definiált kivételkezelő minden leszármazottját elnyeli, így vagy ne alkalmazzuk (csak valamelyik leszármazottját), vagy ha mégis szükséges, akkor a catch ágak közül ezt a kivételt kezeljük legutoljára Így ez csak akkor fut le, ha előtte nem soroltuk fel egyik speciálisabb leszármazottját sem 14

Kivételek specifikálása A kivétel specifikálása (a kivételkezelés elhalasztása ): visszaadott_érték metódusnév(paraméterek) throws keltett_kivételosztályok_felsorolása { } // metódus kódja A throws kulcsszó használatának esetei: A metóduson belül egy olyan kivétel keletkezhet, aminek a kezelését nem tudjuk (akarjuk) megoldani. A kulcsszó segítségével jelezhetjük a hívó metódus számára, hogy a felsorolt kivételek továbbítására számíthat A metóduson belül egy kötelező kivételt dobni képes (amit egy throws kulcsszóval jelez számunkra) metódust hívunk, azonban a kivételt nem tudjuk ezen a szinten kezelni. Mivel ez fordítási hibához vezetne, a throws kulcsszóval jelöljük, hogy ezt a kivételt majd az ezt meghívónak kell kezelnie (persze ő is specifikálhatja, de végül valakinek kezelnie kell) 15

Kivételek dobása A kivétel eldobása: throw kivételobjektum throw new kivételosztály(konstr. param.) Lehetséges okai A program ezen a szinten nem tudja kezelni az előállt hibát, ezért egy kivételdobással ezt a feladatot továbbítja a hívási láncban visszafelé Kivétel kezelése során más típusú kivétel létrehozása és dobása Program tesztelése Megjegyzés: a saját, az Exception osztályból, a RuntimeException osztályból, vagy azok bármely leszármazottából származó kivételosztály alkalmazása esetén is lehet ilyen módon kivételt dobni, ennek kezelése teljesen egyezik a korábban említettekkel 16

Feladat 3.2. feladat: Készítsünk olyan programot, amelyben egész számok osztását mutatjuk be, és a nevező legyen zérus! 3.3.a. feladat: A nullával osztó programban kezeljük le a kivételt! 3.3.b. feladat: A nullával osztó programban használjuk a finally kiegészítést! 3.4. feladat: Készítsünk saját kivételosztályt, és a fenti példát egészítsük ki azzal, hogy egyel való osztáskor dobjon egy DivisionByOneException kivételt! 3.5. feladat: A saját kivételt kezelő programban készítsünk olyan metódust, amelyben a kivételt specifikáljuk! 17

Java osztálykönyvtár és használata Témakörök Csomagok Kivételkezelés Osztálykönyvtárak használata 18

Osztálykönyvtárak használata Osztálykönyvtárak: osztályok és típusok összessége, amelyek segítségével összetett feladatokat is meg tudunk oldani Java osztálykönyvtárak gyári osztálykönyvtár saját osztálykönyvtár Használatukhoz a megfelelő csomagot importálni kell (kivétel a java.lang csomag) Futtatás során a betöltendő lefordított osztályok elérhetőségét biztosítani kell (aktuális könyvtár, CLASSPATH, szerver konfigurációs állományok) A gyári osztálykönyvtárak esetén mindig figyelembe kell venni, hogy a futtató környezet mit tud biztosítani (kiadás, verziószám stb.) 19

Alapvető osztálykönyvtárak Részletes leírás elérhető: http://java.sun.com/javase/6/docs/api/ Csomag javax.applet java.awt java.beans java.io java.lang java.math java.net java.rmi java.security java.sql java.util Tartalma Appletek Vizuális felület Javabeans létrehozás/kezelés Kommunikáció Alapvető nyelvi elemek Matematikai osztályok Hálózatok Távoli metódushívás Biztonságpolitika Adatbáziskezelés Segédosztályok További lehetőségek: javax. csomagok 20

java.lang csomag csomagoló osztályok A java.lang csomag tartalmazza az egyes primitív típusokhoz használatos csomagoló osztályokat. Ezekkel: Primitív típus objektumként használható (pl. gyűjteményekben) Típussal kapcsolatos statikus műveletek/konstansok Pl. Integer osztály public Integer(int value) public Integer(String s) throws NumberFormatException public int intvalue() public double doublevalue() public static String tostring(int i) public static String tostring(int i, int radix) public static int parseint(string s, int radix) throws NumberFormatException public static final int MIN_VALUE 21

Konverziós lehetőségek Típuskényszerítés (casting) int a; double b; b = (double)a; a = (int)b; Boxing/unboxing int a; Integer b; b = Integer.valueOf(a); b = new Integer(a) a = b.intvalue() String konverziók int a; String b; b = Integer.toString(a); b = new Integer(a).toString(); b = + a; a = Integer.parseInt(b); 22

java.lang csomag Szövegkezelés java.lang.string osztály Nem módosítható Unicode szöveget tárol public String(String original) public String(byte[] bytes, Charset charset) public int length() public boolean isempty() public char charat(int index) public boolean equals(object anobject) public boolean equalsignorecase(string anotherstring) public int compareto(string anotherstring) public int indexof(string str) public String substring(int beginindex, int endindex) public String touppercase() stb. 23

java.lang csomag Szövegkezelés java.lang.stringbuffer osztály Változtatható Unicode szöveget tárol public StringBuffer() public StringBuffer(int capacity) public StringBuffer(String str) public int length() public int capacity() public void ensurecapacity(int minimumcapacity) public char charat(int index) public StringBuffer append(string str) public StringBuffer replace(int start, int end, String str) public StringBuffer insert(int offset, String str) public String tostring() stb. 24

java.util csomag Szövegkezelés java.lang.stringtokenizer osztály Szöveget felbontja elválasztójelek mentén public StringTokenizer(String str, String delim) public boolean hasmoretokens() public String nexttoken() public int counttokens() stb. Példa String s = Rövid példa szöveg ; StringTokenizer st = new StringTokenizer(s, ); while (st.hasmoretokens()) { System.out.println(st.nextToken()); } 25

java.util csomag Gyűjtemények java.util.vector osztály Adatok dinamikus tárolását teszi lehetővé public Vector() public int size() public int capacity() public boolean contains(object o) public int indexof(object o) public E elementat(int index) public void addelement(e obj) public void insertelementat(e obj, int index) public void setelementat(e obj, int index) public void removeelementat(int index) public boolean removeelement(object obj) stb. Generikus típus 26

java.util csomag Gyűjtemények java.util.hashmap osztály Adatok dinamikus tárolását teszi lehetővé kulcs alapján public HashMap() public int size() public V get(object key) Generikus típus public V put(k key, V value) public boolean containskey(object key) public boolean containsvalue(object value) public V remove(object key) public Set<K> keyset() public Collection<V> values() public void clear() stb. 27

java.util csomag Gyűjtemények A Java osztálykönyvtár a.net-hez hasonlóan kiterjedt osztálykönyvtárral rendelkezik az adatok tárolásához (Collection Framework) Ezen tárgynak nem célja ennek teljes áttekintése, azonban javasolt a hierarchia tanulmányozása Interfészek Collection Map List Set SortedMap Osztályok LinkedList, ArrayList HashSet, TreeSet HashMap, TreeMap SortedSet 28

java.math és java.lang.math java.math csomag tartalmaz néhány matematikai osztályt pl. BigInteger / BigDecimal - Nagypontosságú aritmetika java.lang.math osztály konstainsai/metódusai public static final double PI public static double sin(double a) public static double sqrt(double a) public static double ceil(double a) public static double floor(double a) public static int round(float a) public static double pow(double a, double b) public static double random() public static int abs(int a) public static int max(int a, int b) 29

Feladat 3.6. feladat: készítsünk programot, amely a köregyenlet (r 2 = x 2 + y 2 ) alapján kiszámolja (és kijelzi), egy adott 0,0 koordinátájú, egység sugarú kör x,y pontjainak koordinátáit! 3.7. feladat: egészítsük ki úgy a programot, hogy az így nyert pontokat tároljuk el egy Vector objektumban! 3.8. feladat: legyen lehetőség megadott x és y koordináták alapján szűrni és a képernyőn jelenítsük meg a meghatározott téglalapba eső pontokat! 30

Házi feladat Készítsen egy Berelszamolo csomagot, benne egy Dolgozo osztályt: név (pl. Nagy Béla ) előző munkahelyei (pl. BKV;FTC;BMF;FKF ) fizetés (pl. 67000) getkifizetendo() visszaadja a fizetést levonva az adókat (50%-ot) Ugyanebben a névtérben készítse el a Dolgozo osztály GyerekesDolgozo leszármazottját, ami kiegészíti a fenti osztály egy családipótlék (pl. 30000) mezővel. Módosítsa a getfizetendo() metódust, hogy ezt is vegye figyelembe Készítsen menüvezérelt programot, ami megvalósítja az alábbi funkciókat: Billentyűzetről megadott adatokkal feltölt egy vektort Dolgozo vagy GyerekesDolgozo objektumokkal Listázza azokat, akiknek a kifizetendő összeg nagyobb mint az átlagos Törölje a listából azokat, akik egy megadott helyen dolgoztak már előtte Készítsen egy FeketeMunkas osztályt, ami csak egy nevet tartalmaz, és mivel nincs fix fizetése, ezért a fizetéseknek egy listáját. Egy metódussal legyen lehetőség ebbe felvenni egy új kifizetést Készítsen egy IKirughato interfészt, aminek van egy vegkielegites() metódusa. Mindhárom osztály valósítsa meg ezt az interfészt, dolgozóknál adja vissza a fizetés háromszorosát, feketemunkásnál pedig az átlagos kifizetés négyzetgyöke * Π értéket lefelé kerekítve Egy tömbbe helyezzen néhány kirúgható embert és számolja ki a költségeket. Ha valakinél ez több mint 1M, dobjon NemRughatoKi kivételt! 31

Ajánlott irodalom Az óra anyagához kapcsolódó irodalom Nyékyné Gaizler Judit: Java 2 útikalauz programozóknak 1.3 I.; ELTE TTK Hallgatói alapítvány, Budapest 97 105. o. The Java API Reference: http://java.sun.com/javase/6/docs/api/ Java Collection Framework: http://java.sun.com/docs/books/tutorial/collections/index.html 32