Die Java-Bibliothek Java API Java 2 Collections Nützliche Utility-Klassen des JDK java.util : Collections, Properties, I18N, Scanner java.text : Ausgabeformatierung u.a. java.util.prefs : Hierarchische Konfigurationsdaten (1.5) java.util.logging : Aufzeichnung von Ablaufinformationen (1.5) javax.xml : Verarbeitung von XML-Dokumenten (1.5, vorher Xerces) Die Java-Bibliothek Java API Java 2 Collections java.util.Properties Verwaltet String-Tupel (Key, Value) unterstützt laden/speichern Methoden: S t r i n g g e t P r o p e r t y ( S t r i n g key ) S t r i n g g e t P r o p e r t y ( S t r i n g key , S t r i n g d e f a u l t V a l u e ) O b j e c t s e t P r o p e r t y ( S t r i n g key , S t r i n g v a l u e ) v o i d s t o r e ( OutputStream out , S t r i n g h e a d e r ) void load ( InputStream inStream ) Dateiformat: # comment d a t a b a s e = j d b c : m y s q l : / / l o c a l h o s t : 3 3 0 6 / mydb l a n g u a g e = de Die Java-Bibliothek Java API Java 2 Collections Interfaces List Klassen Map Klassen Set Klassen Collections J2SE 5.0 Java 2 Collections java.util.* Bestandteil des JDK seit Java 1.2 Vorteile: weniger Programmieraufwand bessere Performanz Standard-Schnittstellen Wiederverwendung Standardalgorithmen (Sort, Search) http://java.sun.com/developer/onlineTraining/collections/ Collection.html Die Java-Bibliothek Java API Java 2 Collections Interfaces List Klassen Map Klassen Set Klassen Collections J2SE 5.0 Collection Interfaces <<Collection>> <<List>> <<Set>> <<Map>> <<SortedSet>> <<SortedMap>> Die Java-Bibliothek Java API Java 2 Collections Interfaces List Klassen Map Klassen Set Klassen Collections J2SE 5.0 Collection Interfaces Collection : Ansammlung von Objekten, Duplikate erlaubt Set : Collection ohne Duplikate SortedSet : Set mit Reihenfolge List : Collection mit Positionen Map : Zugriff auf Objekte über ein Schlüsselobjekt SortedMap : Map mit Reihenfolge → es sollte soweit wie möglich das Interface und nicht eine bestimmte Implementierungsklassen verwendet werden L i s t s e a r c h ( S t r i n g what ) { L i s t r e s u l t = new A r r a y L i s t ( ) ; ... return result ; } Die Java-Bibliothek Java API Java 2 Collections Interfaces List Klassen Map Klassen Set Klassen Collections J2SE 5.0 Interface: Collection void clear () b o o l e a n add ( O b j e c t e l e m e n t ) boolean addAll ( C o l l e c t i o n c ) boolean contains ( Object element ) boolean c o n t a i n s A l l ( C o l l e c t i o n c ) b o o l e a n remove ( O b j e c t e l e m e n t ) boolean removeAll ( C o l l e c t i o n c ) boolean r e t a i n A l l ( C o l l e c t i o n c ) Object [ ] toArray () , Object [ ] toArray ( Object [ ] array ) int size () boolean isEmpty ( ) I t e r a t o r i t e r a t o r () Die Java-Bibliothek Java API Java 2 Collections Interfaces List Klassen Map Klassen Set Klassen Collections J2SE 5.0 Interface: Set / SortedSet Set : Interface identisch zu Collection keine Duplikate SortedSet : Comparator c o m p a r a t o r ( ) Object f i r s t () Object l a s t () S o r t e d S e t h e a d S e t ( O b j e c t toElem ) SortedSet t a i l S e t ( Object fromElement ) S o r t e d S e t s u b S e t ( O b j e c t from , O b j e c t t o ) Die Java-Bibliothek Java API Java 2 Collections Interfaces List Klassen Map Klassen Set Klassen Collections J2SE 5.0 Interface: List v o i d add ( i n t i n d e x , O b j e c t e l e m e n t ) boolean addAll ( i n t index , C o l l e c t i o n c ) O b j e c t remove ( i n t i n d e x ) Object s e t ( i n t index , Object element ) Object get ( i n t index ) i n t indexOf ( Object o ) i n t l a s t I n d e x O f ( Object o ) L i s t s u b L i s t ( i n t fromIndex , i n t toIndex ) L i s t I t e r a t o r l i s t I t e r a t o r () L i s t I t e r a t o r l i s t I t e r a t o r ( int index ) Die Java-Bibliothek Java API Java 2 Collections Interfaces List Klassen Map Klassen Set Klassen Collections J2SE 5.0 Map Interface Abbildung von Objekten (Key) auf Objekte (Value) Schlüssel eindeutig Identifikation über hashCode() und equals() Daher: Vorsicht bei eigenen Klassen! SortedMap : zusätzlich Sortierung auf Keys Die Java-Bibliothek Java API Java 2 Collections Interfaces List Klassen Map Klassen Set Klassen Collections J2SE 5.0 Interface: Map void clear () boolean containsKey ( Object key ) boolean containsValue ( Object value ) Object get ( Object key ) O b j e c t p u t ( O b j e c t key , O b j e c t v a l u e ) v o i d p u t A l l (Map t ) O b j e c t remove ( O b j e c t k e y ) boolean isEmpty ( ) int size () Set keySet () Collection values () Set e n t r y S e t () Die Java-Bibliothek Java API Java 2 Collections Interfaces List Klassen Map Klassen Set Klassen Collections J2SE 5.0 List Klassen <<Collection>> <<List>> AbstractCollection AbstractList LinkedList ArrayList Die Java-Bibliothek Java API Java 2 Collections Interfaces List Klassen Map Klassen Set Klassen Collections J2SE 5.0 Vergleich LinkedList/ArrayList ArrayList 0 1 2 3 4 5 size()=5 null Head LinkedList Die Java-Bibliothek 6 Java API Java 2 Collections Interfaces List Klassen Map Klassen Set Klassen Collections J2SE 5.0 Vergleich zu integrierter Implementierung Ein Feld von Nutzobjekten 0 1 2 3 4 5 size()=5 null Head Nutzobjekte, welche sich selber verlinken Die Java-Bibliothek 6 Java API Java 2 Collections Interfaces List Klassen Map Klassen Set Klassen Collections J2SE 5.0 Vergleich LinkedList / ArrayList beide: Kapazität dynamisch ArrayList : evtl. umkopieren nötig LinkedList : zusätzliche Methoden: {add,get,remove}{First,Last} einfügen/löschen anfügen/löschen hinten anfügen/löschen vorne Indexzugriff suchen LinkedList O(n) O(1) O(1) O(n) O(n) ArrayList O(n) O(1) O(n) O(1) O(n) Die Java-Bibliothek Java API Java 2 Collections Interfaces List Klassen Map Klassen Set Klassen Collections J2SE 5.0 Vergleich Iteration Schlecht: f o r ( i n t i = 0 ; i < l i s t . s i z e ( ) ; i ++ ) { O b j e c t elem = l i s t . g e t ( i ) ; // body } Gut: Iterator iter = list . iterator (); w h i l e ( i t e r . hasNext ( ) ) { O b j e c t elem = i t e r . n e x t ( ) ; // body } Java 1.5: f o r ( O b j e c t elem : // body } list ) { Die Java-Bibliothek Java API Java 2 Collections Interfaces List Klassen Map Klassen Set Klassen Collections J2SE 5.0 Collection Interfaces (Erinnerung) <<Collection>> <<List>> <<Set>> <<Map>> <<SortedSet>> <<SortedMap>> Die Java-Bibliothek Java API Java 2 Collections Interfaces List Klassen Map Klassen Set Klassen Collections J2SE 5.0 Map Klassen <<Map>> AbstractMap <<SortedMap>> HashMap TreeMap Die Java-Bibliothek Interfaces List Klassen Map Klassen Set Klassen Collections J2SE 5.0 Java API Java 2 Collections Hash-Tabelle hash F M T 0 N 1 2 3 O A J Q 4 5 C 6 E Die Java-Bibliothek X Interfaces List Klassen Map Klassen Set Klassen Collections J2SE 5.0 Java API Java 2 Collections Binärbaum N J B Q L X Die Java-Bibliothek Java API Java 2 Collections Interfaces List Klassen Map Klassen Set Klassen Collections J2SE 5.0 Vergleich HashMap / TreeMap TreeMap balancieren → wird sonst zu LinkedList HashMap schnell, wenn nicht zu voll (≈ 70%) → wird sonst zu LinkedList (schlechte hashCode() -Funktion) TreeMap ist immer sortiert HashMap im Normalfall schneller TreeMap hat garantierte log. Zugriffszeit einfügen löschen suchen HashMap O(1)-O(n) O(1)-O(n) O(1)-O(n) TreeMap O(log n) O(log n) O(log n) Die Java-Bibliothek Java API Java 2 Collections Interfaces List Klassen Map Klassen Set Klassen Collections J2SE 5.0 Set Klassen <<Collection>> <<List>> LinkedList AbstractCollection <<Set>> AbstractList AbstractSet <<SortedSet>> ArrayList HashSet TreeSet Die Java-Bibliothek Java API Java 2 Collections Interfaces List Klassen Map Klassen Set Klassen Collections J2SE 5.0 Set Klassen benutzen entsprechende Map -Klassen nur Key relevant Die Java-Bibliothek Java API Java 2 Collections Interfaces List Klassen Map Klassen Set Klassen Collections J2SE 5.0 Sortieren Interface Comparable : i n t compareTo ( O b j e c t e l e m e n t ) Interface Comparator: i n t compare ( O b j e c t elem1 , O b j e c t elem2 ) boolean equals ( Object obj ) Die Java-Bibliothek Java API Java 2 Collections Interfaces List Klassen Map Klassen Set Klassen Collections J2SE 5.0 Klasse Collections Spezielle Collections: unmodifiable synchronized singleton empty Algorithmen auf Listen: Sortieren binäre Suche Minimum/Maximum füllen, kopieren, umdrehen, zufällig vertauschen Die Java-Bibliothek Java API Java 2 Collections Interfaces List Klassen Map Klassen Set Klassen Collections J2SE 5.0 J2SE 5.0 (1) generische Typen (d.h. mit Typinformation), insbesondere Collections: Set<S t r i n g > a S e t = new HashSet<S t r i n g > ( ) ; Iteration von for-Schleife unterstützt (Collections und Felder) (siehe java.lang.Iterable ): f o r ( S t r i n g a S t r i n g : aSet ) { System . o u t . p r i n t l n ( a S t r i n g ) ; } Autoboxing/unboxing: L i s t <I n t e g e r > numbers = new A r r a y L i s t <I n t e g e r > ( ) ; f o r ( i n t n : numbers ) { ... } Die Java-Bibliothek Java API Java 2 Collections Interfaces List Klassen Map Klassen Set Klassen Collections J2SE 5.0 J2SE 5.0 (2) Interfaces: Queue , BlockingQueue , ConcurrentMap Implementierungen dazu (2/5/1) EnumSet / Map (Bitvektoren) Algorithmen: Häufigkeit (frequency), leere Schnittmenge (disjoint) Enums: enum C o l o r s { RED, BLUE , GREEN, YELLOW, BLACK } varargs printf: System . o u t . f o r m a t ( ”%02d %10 s ” , 3 , ” a s d ” ) ; System . o u t . p r i n t l n ( S t r i n g . f o r m a t ( ”%02d %10 s ” , 3 , ” a s d ” ) ) ; Die Java-Bibliothek