Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold.

Ähnliche Präsentationen


Präsentation zum Thema: "Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold."—  Präsentation transkript:

1 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold Institut für Wirtschaftsinformatik Software Engineering JKU Linz Termin 5,6 (Collections)

2 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 2 In der Java-Klassenbibliothek unterscheidet man zwei Mengen von Klassen, die Collections realisieren. 1.die traditionellen Klassen (seit 1.0) Vector Stack Hashtable Dictionary Bitset 2.das Collection API (seit 1.2) Umfangreiches API (Sorting,...) 1 & 2 existieren seit 1.2 parallel. Collections Historie

3 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 3 Collections Traditionelle Klassen: Vector Realisiert eine Liste mit Direktzugriff, die zu Wachsen imstande ist. Stack Stapel (push, pop) Hashtable & Dictionary Zuordnung von Schlüsseln auf Werte Bitset Realisiert eine Menge von Bits, die einzeln gesetzt werden können. Unterstützt Operationen wie set (int bit), and(Bitset s), or(Bitset s),

4 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 4 Stack Allgemeines Realisiert einen Stapel, der zur Laufzeit wachsen kann. LIFO-Prinzip (last in – first out) Das letzte Element das eingefügt wurde, kann als erstes entnommen werden Erweitert die Klasse java.util.Vector (um 5 Methoden) Vector Stack

5 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 5 Stack Methoden +Stack() +push(Object o) +pop():Object //throws EmptyStackException +peek():Object //throws EmptyStackException +empty():boolean +search(Object o):int // 1..top elem; uses equals public (Angelehnt an UML) -... private

6 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 6 HashTable Allgemeines Unterstützt Hashing (siehe Algo VL) Schlüssel (keys) werden auf Werte (values) abgebildet. Beides sind Objekte und dürfen nicht null sein. Typische Schlüssel sind z.B. Strings. an benötigt hashing, wenn: man eine sehr große Menge an möglichen Schlüsselwerten hat (nicht: zB >array) effizient sein möchte: O(1) für Suchen, Einfügen, Löschen !!

7 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 7 HashTable Beispiel (einfügen) Key = int ( ) Value = Person ("Hans Huber", "Linz",...),... Schlüssel-Transformation (einfaches Beispiel): N = 7 Speicherplätze (array) " "12423 (gleich für gleiche Schlüsselobjekte) MOD 7ord(k) 5 (Kollissionen möglich) Hans Huber Linz.... O(1) Ermöglicht schnelle Suche von Nummer zu Person.

8 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 8 HashTable Methoden +HashTable(int initialCapacity) //lf = HashTable(int initialCapacity, float loadfactor) +put(Object key, Object value) +get(Object key): Object value +isEmpty():boolean +clear() +remove(Object key) +toString() // overwritten [],[],[] #rehash() // automatically when loadfactor...

9 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 9 HashTable Anwendung Hashtable ht = new Hashtable(10); Person p = new Person("Hans","Huber","Linz",...); ht.put(new Integer( ), p)... int searchNumber = io.readInt(); Person p = (Person)ht.get(searchNumber); //O (1) //removing the Person ht.remove(searchNumber)

10 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 10 HashTable Anwendung (2) //Properties (ini – file) Hashtable ht = new Hashtable(10); ht.put("systemDir", io.getFile()); ht.put("currentUser", io.getPerson());... Person user = (Person)ht.get("currentUser");

11 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 11 HashTable Zusammenfassung Schlüssel (keys) werden auf Werte (values) abgebildet. Beides sind Objekte und dürfen nicht null sein. Zu einem Schlüssel wird genau ein Wert gespeichert. Zur Berechnung der transformierten Schlüssel gibt es in der Klasse Object eine Methode hashCode() (Standardimplementierung gibt meist interne Speicheradresse zurück)

12 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 12 BitSet Allgemeines Keine Collection Klasse in unserem Sinn, wird aber zu diesen gezählt Verwaltet eine Menge an Bits (dynamisch wachsend) und unterschtützt logische Operationen (ähnlich den bitwise - Operatoren, die auf ints,... angewandt werden können) Methoden +BitSet() //initially all bits are false +set(int index) -> true +clear(int index) -> false +get(int index):boolean +or(BitSet set) +and(BitSet set) +xor(BitSet set)... f fffft....

13 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 13 Zusammenfassung Traditionelle Klassen Vector Stack HashTable BitSet Alle Klassen befinden sich in java.util.*

14 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 14 Das Collection Framework Allgemeines Alte Collections Klassen waren wenig vielseitig (z.B.: Sortieren, Mengenmetaphern,...) Die Konzepte wurden mit JDK1.2 neu überdacht und auch die alten Klassen in dieses neue Konzept (allerdings etwas unschön) eingefügt Es gibt nun ca 20 Klassen, die ein solides Fundament für den Umgang mit Mengen von Daten(Objekten) darstellen Alle Klassen und interfaces befinden sich in java.util.

15 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 15 Das Collection Framework Vorteile weniger Programmieraufwand, da man kaum mehr neue Collections entwickeln muß, und selbst dann Unterstützung im Collection Framework findet effiziente Implementierung keine weiteren APIs nötig, weniger Lernaufwand Nachteile relativ kompliziert

16 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 16 Das Collection Framework Basiskonzepte (Übersicht) Collection List Set SortedSet Map (key->value) vgl. HashTable (keine Collection) SortedMap Realisierung als eine Reihe von interfaces

17 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 17 Collection Allgemeines Eine Collection repräsentiert eine Menge von Objekten (seine Elemente) (besser: Referenzen auf Objekte) Collection ist ein interface; Es stellt den kleinsten gemeinsamen Nenner der meisten Collection-Implementierungen (Klassen) dar. Es enhält allgemeine Methoden wie contains(Object), toArray(),... Von ihm sind die interfaces List und Set direkt abgeleitet Methoden zur Manipulation (add,...) müssen nicht unbedingt in Collections-Implementierungen sinnvoll implementiert sein (UnsupportedOperationException) In den hier behandelten Klassen sind alle (!) optionalen Methoden implementiert. Es gibt keine "reinen" Collections, also konkrete Klassen die nur das Collection-interface implementieren.

18 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 18 interface Collection Methoden // Basic Operations int size(); boolean isEmpty(); boolean contains(Object element); boolean add(Object element); // Optional!! // returns if col. changed ! boolean remove(Object element); // Optional Iterator iterator();//zum iterieren über alle Elemente unabhängig von der konkreten Collection // Bulk Operations (Mengen–Operationen) boolean containsAll(Collection c); boolean addAll(Collection c); // Optional boolean removeAll(Collection c); // Optional boolean retainAll(Collection c); // Optional void clear(); // Optional // Array Operations (zur Konvertierung in Arrays) Object[] toArray(); Object[] toArray(Object a[]);//Ergebnisarray ist vom Typ des übergebenen Arrays

19 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 19 interface Iterator Methoden hasNext():boolean next():Object remove() // last returned object (OPTIONAL !) Anwendung Iterator it = alist.iterator(); while (it.hasNext()) { Object cur = it.next(); doSomethingWith(cur); } Iteriert über jedes Objekt einer Implementierung von Collection (zB. LinkedList, TreeSet,...)

20 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 20 Hierarchie Collection ListSet Map ArrayListLinkedList Vector HashSet TreeSet HashMapHashtable

21 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 21 Set, List and Map Set List Ein Set ist eine Collection, die keine Elemente (Objekte) mehrfach enthalten kann. Es werden keine neuen Methoden hinzugefügt. Klassen die Set implementieren garantieren jedoch, daß sie jedes Element nur einmal enthalten (bzw. Refenz, vgl. o.equals(Object o)). Im Unterschied zu Collection und Set wird hier eine sequentielle Ordnung (nicht Sortierung !!) der enthaltenen Elemente vorausgesetzt. Eine Liste kann auch gleiche Elemente mehrfach enthalten. Das List interface erweitert Collection um einige Methoden für sequentiellen Zugriff. (z.B.: get(int i); set (int index, Object o))

22 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 22 Set, List and Map Map Map ist nicht von Collection abgeleitet. Es bildet Schlüssel auf Werte ab. (vgl. Hashtable). Ein Schlüsselwert kann nur einmal in der Map enthalten sein und wird auf maximal ein Objekt (Wert) abgebildet. "Schlüssel" und "Werte" sind beliebige Objekte. zb: "username" -> "Hilpold" oder " > Person-Object

23 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 23 interface Set und Klassen Menge von Objekten ohne Duplikate keine weiteren Methoden, nur Restriktion interface Set Klassen (Implementierungen eines Set) HashSet Set, das Hashing verwendet (speichert quasi nur keys, keine values) Einfügen, Suchen, Löschen O(1) ! Traversierung ist rel. teuer TreeSet Set, das intern einen red-black-tree verwendet

24 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 24 interface Set und Klassen Beispiele //basic operations Set s = new HashSet(); System.err.println(s.add("Herbert")); // -> true, false (true means "has been inserted") // s.size(); s.isEmpty();... //bulk operations s1.containsAll(s2): Returns true if s2 is a subset of s1 s1.addAll(s2): Transforms s1 into the union of s1 and s2 s1.retainAll(s2): Transforms s1 into the intersection of s1 and s2 s1.removeAll(s2): Transforms s1 into the (asymmetric) set difference of s1 and s2 a, bd,ec

25 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 25 interface Set und Klassen HashSet keine Ordnung der enthaltenen Objekte implementiert keine weiteren Methoden Tuning parameter: loadFactor, initialcapacity einfügen, löschen, suchen = O(1) Iteration linear abhängig von capacity und tatsächlich enthaltenen Objekten Defaults: 101 (capacity) und 0.75 (load factor)

26 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 26 interface Set und Klassen TreeSet Objekte müssen Comparable sein, oder es muß ein Comparator angegeben werden. implementiert interface SortedSet (sonst keine weiteren Methoden) keine Tuning parameter einfügen, löschen, suchen = O(log(n)) (verwendet intern eine TreeMap) Iteration über die Elemente rel. günstig Elemente sind immer sortiert (später mehr)

27 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 27 interface SortedSet Allgemeines Klassen, die es implementieren garantieren eine aufsteigende Ordnung der enthaltenen Elemente Die Sortierung orientiert sich entweder an einem sog. Comparator oder an der "natürlichen Ordnung" der Elemente Implementierung im Framework durch die Klasse TreeSet Methoden comparator(): Comparator //returns null if "natural" ordering is used first():Object last():Object subSet(Object first, Object last):SortedSet //all elements between first and last (excl.)...

28 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 28 interface SortedSet 2 Möglichkeiten zur Sortierung 1)Verwendung eines Comparators Ein eigener Komparator (zB PersonComparator) implementiert das Interface. Man muß nur die Methode compare überschreiben. siehe auch Java Referenz im JBuilder interface Comparator compare(Object o1, Object o2):int // 0... o1 == o2 // <0... o1 < o2 // >0... o1 > o2...

29 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 29 interface SortedSet 2 Möglichkeiten zur Sortierung 2) Objekte implementieren Comparable Alle Objekte, die im Set enthalten sein sollen müssen das interface Comparable implementieren Dieses hat nur eine Methode siehe auch Java Referenz im JBuilder interface Comparable compareTo(Object o):int // 0... this == o2 // <0... this < o2 // >0... this > o2...

30 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 30 interface SortedSet Anwendung 1) Comparator class PersonComparator implements Comparator { public int compare(Object o1, Object o2) { Person a = (Person)o1; Person b = (Person)o2; return a.getSurName().compareTo(b.getSurName()); //String implements Comparable } SortedSet s = new TreeSet(new PersonComparator()); s.add(new Person("c", "c", "z")); //fore, surname, town s.add(new Person("b", "b", "z")); s.add(new Person("a", "a", "z")); // !! a.add(new Person("c", "c", "z")) // fails!, person seems equal to // a person already in the set // -> need to extend compare

31 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 31 interface SortedSet Anwendung 2) Comparable (natürliche Ordnung) class Person implements Comparable { public int compareTo(Object o) { Person a = (Person)o; return this.getSurName().compareTo(a.getSurName()); //String implements Comparable } SortedSet s = new TreeSet(); // ! no parameter s.add(new Person("c", "c", "z")); //fore, surname, town s.add(new Person("b", "b", "z")); s.add(new Person("a", "a", "z")); // !! a.add(new Person("c", "c", "z")) // fails!, person seems equal to // a person already in the set // -> need to extend compare

32 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 32 interface Set und Klassen Menge von Objekten ohne Duplikate SortedSet (für sortierte Menge; Comparator, Comparable) Zusammenfassung Klassen (Implementierungen eines Set) HashSet Set, das Hashing verwendet (speichert quasi nur keys, keine values) Einfügen, Suchen, Löschen O(1) ! Traversierung ist rel. teuer TreeSet Set, das intern einen tree verwendet immer sortiert

33 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 33 interface List und Klassen Liste von Objekten ev. mit Duplikaten impliziert eine Sequenz; jedes Objekt hat einen Index (vgl. Array) einige weitere Methoden zur Nutzung der Sequenz-Eigenschaft interface List Klassen (Implementierungen einer List) ArrayList ersetzt Vector, bessere Methodennamen Implementiert eine Liste als dynamisch wachsendes Array LinkedList Implementiert eine doppelt verkettete Liste Einfügen und Löschen am Beginn O(1) Eignet sich z.B. als Queue

34 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 34 interface List und Klassen Methoden //all Collection Methods + add(int index, Object o) get (int index): Object indexOf(Object o) //returns index of FIRST occurence lastIndexOf(Object o) // LAST occurence listIterator():ListIterator //special Iterator for Lists set(int index, Object o):Object // replace; returns replaced // Object subList(int fromIndex, int toIndex):List // List [from...to[ remove(int index):Object //returns removed Object

35 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 35 interface List und Klassen Beispiele list1.addAll(list2); list1.containsAll(list2); list1 = list2.subList(4, 6); // 4,5 not 6 list1.size(); //as of Collection interface //get, set, add, remove like Vector (shifting) interface ListIterator (like a cursor) next():Object previous():Object hasNext():boolean hasPrevious():boolean nextIndex():int previousIndex():int remove() //removes last returned Object set(Object o)//replaces last returned Object add(Object o)//inserts at the cursor postion // shifts

36 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 36 interface List und Klassen Beispiel ListIterator List l = someLinkedListWithStringsInIt; ListIterator li = l.listIterator() while(li.hasNext()) { String cur = (String)li.next(); if (cur.equals("abcd") { li.set("dbca"); System.err.println("Next is: " + li.nextIndex()); System.err.println("Previous is: " + li.previousIndex()); } li.remove(); // the very last element will be removed //replaces all "abcd" by "dbca" some possible ListIterator positions

37 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 37 Die Klasse Collections Allgemeines java.util.Collections (nicht verwechseln mit interface Collection) Biete eine Sammlung von nützlichen Klassenmethoden (static), mit besonderer Ausrichtung auf Listen Z.B. Sortieren, Mischen,...

38 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 38 Die Klasse Collections Methoden //static methods only reverse(List l) // > 5..1 fill (List l, Object o) // fills List only with o´s sort(List l) //all Elems implement Comparable sort(List l, Comparator c) // need not implement Comparable shuffle(List l) // "Mischen" shuffle(List l, Random r) binarySearch(List l, Object o) // list has to be sorted // in natural order (Comparable) binarySearch(List l, Object o, Comparator c) // list has to be sorted // with the given Comparator // ArrayList -> O(log n) // LinkedList -> possible, but sequential (normal) search O(N)..... //many more methods, but not needed here

39 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 39 Rückblick Hierarchie Collection ListSet Map ArrayListLinkedList Vector HashSet TreeSet HashMapHashtable Collections Comparator Comparable SortedSet

40 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 40 interface Map und Klasse(n) interface Map Klasse (Implementierungen einer Map) HashMap ersetzt Hashtable Hashing siehe Hashtable-Folien weitere Maps zB SortedMap hier nicht behandelt Map ist nicht von Collection abgeleitet. Eine Map bildet Schlüssel auf Werte ab. (vgl. Hashtable). Ein Schlüsselwert kann nur einmal in der Map enthalten sein und wird auf maximal ein Objekt (Wert) abgebildet.

41 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 41 interface Map und Klasse(n) Methoden von Map put(Object key, Object value): Object // replaced value or null get(Object key): Object remove(Object key) containsKey(Object key):boolean containsValue(Object value):boolean size():int isEmpty():boolean //bulk operations putAll(Map t) // overwrites equal keys with new values clear() //Collection views keySet():Set values(): Collection entrySet(): Set // Set of Objects Type = Map.Entry // Map.Entry is an inner interface // each object represents a key/value pair

42 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 42 interface Map und Klasse(n) Beispiel Map map = new HashMap(); map.put ("user", new Person(...)); map.put ("userDir", "/user/home"); map.put ("host", " "); String host = map.get("host"); map.remove("host"); // key/value pair "host" wird gelöscht map.clear();

43 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 43 Zusammenfassung Hierarchie Collection ListSet Map ArrayListLinkedList Vector TreeSet (sorted) HashMap Hashtable Collections (insb. List) Comparator Comparable HashSet

44 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 44 Zusammenfassung Hinweise Jedes Interface definiert eine Reihe von Methoden Zu jedem behandelten Interface gibt es eine oder mehrere Implementierungen, die das jew. Interface kaum erweitern Zum Verständnis sind also insbesondere die Grundideen hinter den Interfaces (Collection, List, Set, Map, SortedSet) wichtig Comparable und Comparator benötigt man, um zu Sortieren oder binäre Suche auszuführen (siehe Klasse Collections, TreeSet) SortedSets (zB. TreeSet) sind immer sortiert !, Listen kann man sortieren, wenn man es benötigt. Listen kann man mehrmals hintereinander mit unterschiedlichen Comparatoren verschieden sortieren (zB. Person, einmal nach forename, surname,...)


Herunterladen ppt "Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold."

Ähnliche Präsentationen


Google-Anzeigen