Die Java-Bibliothek - Informatik - FB3

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