Folien VO

Werbung
Heute
• Nachbetrachtung Wissensüberprüfung
•
•
•
•
•
•
Sortieren
Interface Comparable
TreeSet
Sortieren von Arrays: Arrays.sort()
Iterator
Interface Map
2.12.2014
IT I - VO 9
1
Organisatorisches
• Nächste Woche entfällt die
Vorlesung.
• In der Übung wird mich Martin
Antenreiter vertreten.
• Wissensüberprüfung findet normal
statt.
• Heute zwei ÜBlätter, eines bis
nächste Woche, eines bis nach
Weihnachten.
2.12.2014
IT I - VO 9
2
Organisatorisches
• Am 17. Dezember findet ab 15 Uhr
der Zwischentest statt.
• Ort: voraussichtlich RaiffeisenHörsaal (E-Mail folgt).
• Am 16. Dezember Fragestunde in
der VO.
• Übung am 18. Dezember?
2.12.2014
IT I - VO 9
3
Wissensüberprüfung
• Wie geht man mit List um?
- List ist ein Interface.
- Es gibt keinen Konstruktor!
• Wie funktioniert Min/Max-Suche?
- Ein Durchlauf aller Elemente
genügt!
- paarweiser Vergleich aller
Elemente bringt wenig
2.12.2014
IT I - VO 9
4
List
• Rückgabewert List<Anlage>:
muss Objekt einer Klasse
zurückgeben, das List
implementiert, z.B. ArrayList
• List<Anlage> = new
ArrayList<Anlage>();
oder
• ArrayList<Anlage> = new
ArrayList<Anlage>();
2.12.2014
IT I - VO 9
5
Sortieralgorithmen
• Einfache Sortieralgorithmen:
- Selectionsort:
Für j=1,...,#Elemente-1:
Suche das j-größte Element und
vertausche es mit Element j.
- Bubblesort:
Vertausche solange benachbarte
Elemente in falscher Reihenfolge,
bis sortiert.
2.12.2014
IT I - VO 9
6
Selectionsort
double[] a; // zu sortierendes Array
for(int i=0; i<a.length-1; i++)
{ // suche kleinstes Element von a[i] bis a[a.length-1]
int min = i;
for(int j=i+1; j<a.length; j++)
{ if( a[j] < a[min])
min = j;
}
// vertausche kleinstes Element a[min] mit a[i]
double hilf = a[min];
a[min] = a[i];
a[i] = hilf;
}
2.12.2014
IT I - VO 9
7
Bubblesort
double[] a; // zu sortierendes Array
do{
boolean veraendert = false;
for (i=0; i<a.length-2; i++){
if (a[i] > a[i+1]){
// vertausche a[i] mit a[i+1]
double hilf = a[i];
a[i] = a[i+1];
a[i+1] = hilf;
veraendert = true;
}
}
}while(veraendert)
2.12.2014
IT I - VO 9
8
Klasse Arrays
(in java.util)
Stellt zahlreiche Methoden für Arrays zur
Verfügung:
– static void sort(Object[] a)
– static String toString(Object[] a)
– static boolean equals(Object[] a1,
Object[] a2)
– static int hashCode(Object[] a)
2.12.2014
IT I - VO 9
9
Java interfaces
• Interfaces sind eine besondere Form von
abstrakten Klassen:
– Alle Methoden sind public und abstract.
– Es gibt keine Konstruktoren.
– Es gibt keine Attribute außer Konstantendefinitionen,
die public, static und final sind.
• D.h., dass eine nicht-abstrakte Unterklasse
eines Interfaces alle Methoden des Interfaces
implementieren muss.
• Insofern ist ein Interface eine Spezifikation, die
angibt, über welche Methoden eine Objekt
dieses Typs verfügt.
2.12.2014
IT I - VO 9
10
Interface Comparable
(in java.lang)
class T implements Comparable<T>
legt fest, dass Objekte der Klasse T mit
anderen Objekten der Klasse T
vergleichbar sind.
Dazu muss die Methode
public int compareTo(T obj)
überschrieben werden.
2.12.2014
IT I - VO 9
11
Interface Comparable
(in java.lang)
• Die Methode
public int compareTo(T obj)
muss so implementiert werden, dass sie
– eine negative Zahl zurückgibt, wenn this
kleiner als obj ist,
– eine positive Zahl zurückgibt, wenn this
größer als obj ist,
– 0 zurückgibt, wenn this gleich obj ist.
• Wenn x.compareTo(y)==0, dann sollte auch
x.equals(y)==true.
2.12.2014
IT I - VO 9
12
Klasse TreeSet
(in java.util)
• Implementierung des Interfaces
Set, das die Vergleichbarkeit der
Elemente mittels compareTo()
ausnutzt.
– Die Elemente können in der durch
compareTo() definierten Reihenfolge
zugegriffen werden.
2.12.2014
IT I - VO 9
13
Interface Map
(in java.util)
• Maps speichern Schlüssel-Wert (keyvalue) Paare.
–
–
–
–
Map<K,V> aMap = new HashMap<K,V>();
aMap.put(key,value);
V value = aMap.get(key);
aMap.remove(key);
• Implementierte Klassen:
– HashMap
• verwendet hashCode() der Keys zum Abspeichern
und Suchen,
– TreeMap
• Verwendet Comparable, um nach Key zu sortieren
2.12.2014
IT I - VO 9
14
Beispiel
HashMap <String, String> phoneBook =
new HashMap<String, String>();
phoneBook.put("Charles Nguyen", "(531) 9392 4587");
String phoneNumber = phoneBook.get("Lisa Jones");
:HashMap
2.12.2014
"Charles Nguyen"
"(531) 9392 4587"
"Lisa Jones"
"(402) 4536 4674"
"William H. Smith"
"(998) 5488 0123"
IT I - VO 9
15
Schleifen und ArrayLists
• Objekte in ArrayList können
innerhalb eines Schleifendurchlaufs
geändert werden.
• Problemlos: aktuelle Elemente
ändern oder ersetzen
• Problematisch: aktuelle Elemente
löschen oder Elemente hinzufügen
2.12.2014
IT I - VO 9
16
Schleifen und Collections
Löschen/Hinzufügen von Elementen
während Durchlaufs einer
Collection:
• for-each: geht nicht (Exception!)
• for-Schleife: geht, aber muss
Indizes entsprechend ändern
2.12.2014
IT I - VO 9
17
Interface Iterator
(in java.util)
• Implementierung von Iterator liefert
Alternative zu for-each-Schleife.
• Iterator bietet folgende Methoden:
hasNext(): gibt's noch ein Element?
next(): gib nächstes Element zurück
• Auslesen aus Iterator mittels whileSchleife
2.12.2014
IT I - VO 9
18
Interface Iterator
• Beispiel:
Auslesen aus Iterator it:
while(it.hasNext())
{
System.out.print(it.next());
}
2.12.2014
IT I - VO 9
19
Interfaces Iterator und
Iterable
• Iterator<E> ist generische Klasse.
• Collection<E> implementiert Interface
Iterable<E>.
• Das Interface Iterable<E> enthält Methode
Iterator<E> iterator(),
die die Elemente der Collection an einen
Iterator übergibt.
2.12.2014
IT I - VO 9
20
Vorteil Iterator
• Interface Iterator<E> verfügt auch
über Methode
remove(),
die in der zugrundeliegenden
Collection das aktuelle Element
entfernt.
• Das ermöglicht das Löschen während
des Auslesens.
2.12.2014
IT I - VO 9
21
Herunterladen