• Keine Ergebnisse gefunden

252-0027 Einführung in die Programmierung 10.0 Generische Programmierung

N/A
N/A
Protected

Academic year: 2022

Aktie "252-0027 Einführung in die Programmierung 10.0 Generische Programmierung"

Copied!
94
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)252-0027 Einführung in die Programmierung 10.0 Generische Programmierung Thomas R. Gross Department Informatik ETH Zürich Copyright (c) Pearson 2013 and Thomas Gross 2016, 2019 All rights reserved..

(2) Übersicht § 10.1 Einleitung § 10.2 ArrayList<T> § 10.3 Vergleichen von Objekten. 2.

(3) ArrayList<Type> ist ein neuer Typ § Kann in der Definition anderer Klassen verwendet werden § Kann als Parameter verwendet werden § Kann als Rückgabewert verwendet werden … § Vorsicht bei Veränderungen einer ArrayList. 3.

(4) ArrayList als Attribut von Objekten § Ein Objekt kann einen Array, eine ArrayList, oder jede beliebige Sammlung ("collection") als Attribut haben. public class Course { private String[] locations; private ArrayList<String> studentNames; private ArrayList<Double> studentGrades; public Course() { locations = new String[5]; studentNames = new ArrayList<String>(); ... }. § Jedes Exemplar enthält jetzt (Referenzen auf) zwei Collection 4 Objekte..

(5) ArrayList als Parameter public void name(ArrayList<Type> name) { … }. Beispiel: Schreiben Sie eine Methode, die alle Substantive (fangen mit Grossbuchstaben an) aus einer ArrayList entfernt // Removes all nouns from the given list. public void removeNouns(ArrayList<String> list) { ... }. 6.

(6) ArrayList als Parameter // Removes all nouns from the given list public static void removeNouns(ArrayList<String> list) {. for (int i=0; i < list.size(); i++ ) { String s = list.get(i); if (Character.isUpperCase(s.charAt(0))) { list.remove(i); i--; } } } § Warum müssen wir i in der Schleife dekrementieren? § Ändert sich list.size() während der Ausführung der Schleife?. 7.

(7) ArrayList als Rückgabewert § Eine Liste kann auch als Ergebnis zurückgegeben werden: ArrayList<Type> methodName(params). § Oder auch public ArrayList<Type> methodName(params) static ArrayList<Type> methodName(params) public static ArrayList<Type> methodName(params). § u.s.w. 8.

(8) Vorsicht bei Veränderungen ArrayList<Integer> list = new ArrayList<Integer>(); for (int i = 1; i <= 10; i++) { list.add(10 * i); // [10, 20, 30, 40, ..., 100] }. § Was gibt dieses Programmsegment aus? for (int i = 0; i < list.size(); i++) { list.remove(i); } System.out.println(list);. § Antwort: [20, 40, 60, 80, 100] 9.

(9) 10.

(10) Übung § Schreiben Sie ein Programm das eine Datei mit ganzen Zahlen liest und dann die Zahlen als Liste druckt: § Dann drucken Sie den Durchschni; der Zahlen. § Geben Sie die grösste und die kleinste Zahl aus. ➡ Filtern (d.h. enAernen) Sie alle geraden Zahlen (Zahlen die durch 2 ohne Rest teilbar sind).. 11.

(11) ArrayList Methoden add(value). appends value at end of list. add(index, value). inserts given value just before the given index, shifting subsequent values to the right. clear(). removes all elements of the list. indexOf(value). returns first index where given value is found in list (-1 if not found). get(index). returns the value at given index. remove(index). removes/returns value at given index, shifting subsequent values to the left. set(index, value). replaces value at given index with given value. size(). returns the number of elements in list. toString(). returns a string representation of the list such as "[3, 42, -7, 15]" 12.

(12) Lösung (Auszug) ArrayList<Integer> numbers = new ArrayList<Integer>(); Scanner input = new Scanner(new File("numbers.txt")); while (input.hasNextInt()) { int n = input.nextInt(); numbers.add(n); } System.out.println(numbers); filterEvens(numbers);. // Remove even numbers. System.out.println(numbers); ... 13.

(13) ArrayList<Integer> numbers = new ArrayList<Integer>(); Scanner input; input = new Scanner(new File("numbers.txt")); while (input.hasNextInt()) { int n = input.nextInt(); numbers.add(n); } System.out.println(numbers); filterEvens(numbers);. // Remove even numbers. System.out.println(numbers); 14.

(14) Lösung (Auszug) ArrayList<Integer> numbers = new ArrayList<Integer>(); Scanner input = new Scanner(new File("numbers.txt")); while (input.hasNextInt()) { int n = input.nextInt(); numbers.add(n); } System.out.println(numbers); filterEvens(numbers); System.out.println(numbers); ... 15.

(15) Lösung (Auszug) // Removes all elements w/ even values from the list. public static void filterEvens(ArrayList<Integer> list) { for (int i = list.size() - 1; i >= 0; i--) { int n = list.get(i); if (n % 2 == 0) { list.remove(i); } } } 16.

(16) Übung § Schreiben Sie eine Methode addStars die eine ArrayList von Strings als Parameter hat und einen “*” nach jedem Element einfügt. § Beispiel : Wenn die ArrayList list am Anfang enthält: [die, schnelle, graue, Schlange] § Dann ist der Effekt des Aufrufs addStars(list) diese Liste: [die, *, schnelle, *, graue, *, Schlange, *] 18.

(17) § Schreiben Sie eine Methode removeStars die eine ArrayList von Strings als Parameter hat in der jedes zweite Element ein “*” ist, und entfernen Sie diese Sterne (machen also den Effekt der Methode addStars rückgängig).. 19.

(18) Lösungen public static void addStars(ArrayList<String> list) { for (int i = 0; i < list.size(); i += 2) { list.add(i+1, "*"); } } public static void removeStars(ArrayList<String> list) { for (int i = 1; i < list.size(); i++) { list.remove(i); } }. 20.

(19) Übung § Schreiben Sie eine Methode intersect die zwei ArrayListen mit ganzen Zahlen als Parameter akzep>ert und eine neue ArrayList zurückgibt, die nur die Elemente enthält, die in beiden Listen vorhanden sind. § Beispiel: Wenn list1 und list2 ursprünglich enthalten: [1, 4, 8, 9, 11, 15, 17, 28, 41, 59] [4, 7, 11, 17, 19, 20, 23, 28, 37, 59, 81] § dann ergibt der Aufruf von intersect(list1, list2) die Liste: [4, 11, 17, 28, 59] 22.

(20) Lösung. (Teil 1). ArrayList<Integer> list1 = new ArrayList<Integer>(); Scanner input = new Scanner(new File("list1.txt")); while (input.hasNext()) { int i = input.nextInt(); list1.add(i); } ArrayList<Integer> list2 = new ArrayList<Integer>(); input = new Scanner(new File("list2.txt")); while (input.hasNext()) { int i = input.nextInt(); list2.add(i); }. 23.

(21) Lösung (Teil 2) ArrayList<Integer> list3 = new ArrayList<Integer>(); list3.addAll(list1); list3.retainAll(list2); System.out.println(list3);. 24.

(22) Andere Übungen § Schreiben Sie eine Methode reverse die die Reihenfolge der Elemente einer ArrayList für Strings umkehrt. § Schreiben Sie eine Methode capitalizeAdverbs die als Parameter eine ArrayList von String Objekten entgegen nimmt und jedes Wort eines englischen Textes, das mit “ly" endet, mit Grossbuchstaben schreibt.. 25.

(23) Übersicht § 10.1 Einleitung § 10.2 ArrayList<T> § ArrayList<String> § Wrapper Typen. § 10.3 Vergleichen von Objekten § 10.4 Mengen § 10.5 Abbildungen § 10.6 Iteratoren. 26.

(24) 10.3 Vergleichen von Objekten. 27.

(25) Die compareTo Methode § Um das Vergleichen von Exemplaren zu ermöglichen sollte eine Java Klasse eine Methode compareTo definieren, die auf der Menge der Exemplare eine (totale) Ordnungsrelation ≤ definiert § Diese erlaubt es dann zwei Exemplare zu vergleichen. § A ≤ B oder B ≤ A § A ≤ B und B ≤ A: A = B. § Beispiel: in der String Klasse gibt es die Methode public int compareTo(String other). 28.

(26) compareTo für String § Beispiel: in der String Klasse gibt es die Methode public int compareTo(String other). § Ein Aufruf someS.compareTo(otherS) liefert: einen Wert < 0 einen Wert > 0 oder 0. wenn someS ”vor" otherS in der Ordnungsrelation ist, wenn someS ”nach" otherS in der Ordnungsrelation ist, wenn someS und otherS in der Ordnungsrelation ”gleich" sind. 29.

(27) Gebrauch von compareTo § compareTo kann im Test einer if Anweisung gebraucht werden. String a = "alice"; String b = "bob"; if (a.compareTo(b) < 0) { ... }. // true. 31.

(28) Gebrauch von compareTo Primitive Type if (a < b) { .... Objects if (a.compareTo(b) < 0) { .... if (a <= b) { .... if (a.compareTo(b) <= 0) { .... if (a == b) { .... if (a.compareTo(b) == 0) { .... if (a != b) { .... if (a.compareTo(b) != 0) { .... if (a >= b) { .... if (a.compareTo(b) >= 0) { .... if (a > b) { .... if (a.compareTo(b) > 0) { .... 32.

(29) compareTo und Collections § Die Methode für binäre Suche (binarySearch) funktioniert für die Klasse Arrays da diese Methode (intern) die compareTo Methode aufruft. String[] a = {"al", "bob", "cari", "dan", "mike"}; int index = Arrays.binarySearch(a, "dan"); // 3. § Auch sortieren ist deswegen möglich String [] s = {"my", "dog", "has", "fleas"}; Arrays.sort(s); System.out.println(Arrays.toString(s));. § Output: [dog, fleas, has, my]. 33.

(30) This sort is guaranteed to be stable: equal elements will not be reordered as a result of the sort. Implementa;on note: This implementa;on is a stable, adap;ve, itera;ve mergesort that requires far fewer than n lg(n) comparisons when the input array is par;ally sorted, while offering the performance of a tradi;onal mergesort when the input array is randomly ordered. If the input array is nearly sorted, the implementa;on requires approximately n comparisons. Temporary storage requirements vary from a small constant for nearly sorted input arrays to n/2 object references for randomly ordered input arrays. 34.

(31) § Arrays hilft bei Arrays mit beliebigen Objekten. Aber wie können wir mit einer ArrayList arbeiten? § Wie die Klasse Arrays gibt es auch eine Klasse Collections die nützliche Methoden für Collections enthält § zum Beispiel sort. § Wir müssen 2 Fälle unterscheiden: § Die (Klasse der) Elemente der ArrayList enthält automatisch compareTo § Die Klasse enthält compareTo nicht automatisch 35.

(32) § Fall 1: Die Elemente der ArrayList stellen compareTo automatisch zur Verfügung ArrayList<String> list = new ArrayList<String>(); String [] s = {"my", "dog", "has", "fleas"}; for (int i = 0; i < s.length; i++) list.add(new String(s[i])); Collections.sort(list); System.out.println(list1);. § Output: [dog, fleas, has, my] 36.

(33) § Wie können wir mit einer ArrayList mit beliebigen Objekten arbeiten? § Fall 2: Selbstdefinierte Klassen – diese stellen compareTo nicht automatisch zur Verfügung Beispiel: Wir halten zu jedem Wort die Position des ersten Auftretens in einem Text fest public class Word { String item; int position; int count;. }. Word(String n) { item = n; }. 37.

(34) 38.

(35) § Wie können wir mit einer ArrayList mit beliebigen Objekten arbeiten? § Fall 2: Selbstdefinierte Klassen String [] s = {"my", "dog", "has", "fleas"}; ArrayList<Word> list1 = new ArrayList<Word>(); for (int i=0; i<s.length; i++) { list1.add(new Word(s[i])); } Collections.sort(list1);. 40.

(36) Sieht gut aus, aber wird nicht übersetzt //javac Example7aa.java Example7aa.java:15: cannot find symbol symbol. : method sort(java.util.ArrayList<Word>). location: class java.util.Collections Collections.sort(list1); ^ 1 error 41.

(37) Selbstdefinierte Typen ordnen § Wir können eine beliebige ArrayList nicht sortieren da Java nicht weiss, wie die Elemente zu ordnen sind. § Unsere Klasse (Word) muss klar machen, wie die Elemente geordnet sind § Dafür gibt es ein Interface das compareTo enthält. 42.

(38) Comparable public interface Comparable<E> { public int compareTo(E other); } § Eine Klasse kann das Interface Comparable implementieren und so eine natürliche Ordnung für ihre Exemplare definieren. § Natürliche Ordnung: es gibt nur eine Ordnungsrelation § Wenn wir mehrere Relationen zulassen wollen dann wird es komplizierter 43.

(39) Comparable § Ein Aufruf someE.compareTo(otherE) liefert: einen Wert < 0. wenn someE ”vor" otherE in der Ordnungsrelation ist,. einen Wert > 0 oder 0. wenn someE ”nach" otherE in der Ordnungsrelation ist, wenn someE und otherE in der Ordnungsrelation ”gleich" sind. 45.

(40) Comparable Muster public class name implements Comparable<name> { ... public int compareTo(name other) { ... } } 46.

(41) 47.

(42) Comparable Beispiel class Word implements Comparable<Word> { String item; int position; int count; …. //constructor(s). public int compareTo(Word String compareItem. otherword) {. = otherword.item;. return (item.compareTo(compareItem)); } }. 48.

(43) Comparable Beispiel § Was wenn wir jetzt die Exemplare auch nach der Position oder der Häufigkeit ordnen wollen? § Dann hätten wir drei mögliche Ordnungsrelationen 1. Lexikographisch auf Grund des Namens 2. Nach Häufigkeit 3. Nach der Position des 1. Auftretens § Geht auch aber dazu müssen wir ein besonderes Objekt konstruieren, einen Comparator<T> § Später. 50.

(44) compareTo und Collec*ons § Auch andere Collections nutzen diese Methode. § Java's TreeSet/Map braucht intern compareTo um eine Ordnung zu definieren Set<String> set = new TreeSet<String>(); for (String s : a) { set.add(s); } System.out.println(s); // [al, bob, cari, dan, mike] 51.

(45) Aufgabe § Sie erinnern sich an die Klasse Point. 52.

(46) Klasse Point public class Point { private int x; private int y; // Constructs a Point at the given x/y location. public Point(int initialX, int initialY) { x = initialX; y = initialY; } // Methods ... } 53.

(47) Aufgabe § Sie erinnern sich an die Klasse Point § Wir wollen die Point Exemplare sortieren können § Das X Attribut entscheidet, ob ein Point vor einem anderen ist, und wenn die X Attribute gleich sind, dann entscheidet das Y Attribut. 54.

(48) Aufgabe § Sie erinnern sich an die Klasse Point § Wir wollen die Point Exemplare sortieren § point1 "vor" point2 wenn § point1.x < point2.x oder § point1.x == point2.x und point1.y < point2.y § point1 "nach" point2 wenn § point1.x > point2.x oder § point1.x == point2.x und point1.y > point2.y § sonst point1 "gleich" point2. 55.

(49) compareTo für Point § Ein Aufruf A.compareTo(B) liefert: einen Wert < 0. wenn A ”vor" B in der Ordnungsrela<on ist,. einen Wert > 0 oder 0. wenn A ”nach" B in der Ordnungsrela<on ist, wenn A und B in der Ordnungsrela<on ”gleich" sind. 56.

(50) Comparable Beispiel public class Point implements Comparable<Point> { private int x; private int y;. }. 57.

(51) Comparable Beispiel public class Point implements Comparable<Point> { private int x; private int y; // unchanged. // must implement compareTo(Point other). } 58.

(52) // sort by x and break ties by y public int compareTo(Point other) { Comparable für if (x < other.x) { Point return -1; } else if (x > other.x) { return 1; } else if (y < other.y) { return -1; // same x, smaller y } else if (y > other.y) { return 1; // same x, larger y } else { return 0; // same x and same y } } 59.

(53) compareTo Diskussion § Subtraktion – Manchmal kann man durch Subtraktion entsprechender Werte den für compareTo gewünschten Rückgabewert erhalten: // sort by x and break ties by y public int compareTo(Point other) { if (x != other.x) { return x - other.x; // different x } else { return y - other.y; // same x; compare y } } 60.

(54) compareTo Diskussion § Subtraktion – Manchmal kann man durch Subtraktion entsprechender Werte den für compareTo gewünschten Rückgabewert erhalten: § Die Idee: § if x > other.x, § if x < other.x, § if x == other.x,. then x - other.x > 0 then x - other.x < 0 then x - other.x == 0. § Achtung: Dieser Weg funktioniert nicht für reelle Zahlen (doubles) 61 aber siehe Math.signum(double).

(55) compareTo Diskussion § toString - Wenn die toString Darstellung der Exemplare der Ordnungsrelation entspricht, dann können wir so vergleichen: // sort by date, e.g. "09/19" > "04/01" public int compareTo(Date other) { return toString().compareTo(other.toString()); }. § Delegation – Wenn die Exemplare Attribute haben, die verglichen werden können (z.B. Strings) dann kann man deren compareTo Methode verwenden : // sort by employee name, e.g. "Jim" < "Susan" public int compareTo(Employee other) { return name.compareTo(other.getName()); }. 62.

(56) Übersicht § 10.4 Mengen § 10.5 Abbildungen. 63.

(57) 10.4 Mengen. 64.

(58) Beispiel § Schreiben Sie ein Programm das "eine grosse Anzahl" von Werten einliest und dann in der umgekehrten Reihenfolge ausgibt § Grosse Anzahl: 100'000, 1'000'000, …. § Keine weiteren Operationen (für dieses Beispiel) § Wir wollen eine Klasse der Collection Frameworks benutzen. § Wollen offen halten welche Klasse verwendet werden soll. 65.

(59) Beispiel § Mögliche Methode public static void task() { CollectionType c = ... process(c); }. § Wirkliche Arbeit wird in Methode process erledigt public static void process(CollectionType c) { // get input // output in reverse order }. 66.

(60) Beispiel -- Fortsetzung § Nehmen wir an wir haben es mit Integer Werten zu tun public static void process(ArrayList<Integer> c) { // get input // output in reverse order }. § Diese Methode kann für ArrayList<Integer> Examplare verwendet werden § Aber ist ArrayList der beste Typ für diese Aufgabe § Was gibt es denn noch?. 67.

(61) Java Collections Framework <<Interface> Map. <<Interface> Collection. <<Interface> List. <<Interface> Set. <<Interface> SortedMap. <<Interface> SortedSet. ArrayList. LinkedList. HashSet. TreeSet. HashMap. TreeMap. 68.

(62) Ansammlungen § Was für eine Ansammlung (collection) ist die beste für dieses Problem? § Vielleicht sollten wir einmal LinkedList versuchen? § Idealerweise schreiben wir Methode process so dass wir sie für beide Ansammlungstypen verwenden können. § Wie kann man diese Frage beantworten? Was müssen wir wissen? 69.

(63) List<E>. 70.

(64) 71.

(65) LinkedList Methoden add(value). appends value at end of list. add(index, value). inserts given value just before the given index, shifting subsequent values to the right. clear(). removes all elements of the list. indexOf(value). returns first index where given value is found in list (-1 if not found). get(index). returns the value at given index. remove(index). removes/returns value at given index, shifting subsequent values to the left. set(index, value). replaces value at given index with given value. size(). returns the number of elements in list. toString(). returns a string representation of the list such as "[3, 42, -7, 15]" 72.

(66) Kommt uns diese Liste bekannt vor?. 73.

(67) Kommt uns diese Liste bekannt vor? § Die selben Methoden sind für ArrayList definiert.. 74.

(68) ArrayList Methoden add(value). appends value at end of list. add(index, value). inserts given value just before the given index, shifting subsequent values to the right. clear(). removes all elements of the list. indexOf(value). returns first index where given value is found in list (-1 if not found). get(index). returns the value at given index. remove(index). removes/returns value at given index, shifting subsequent values to the left. set(index, value). replaces value at given index with given value. size(). returns the number of elements in list. toString(). returns a string representation of the list such as "[3, 42, -7, 15]" 75.

(69) Beispiel -- Fortsetzung § Nehmen wir an wir haben es mit Integer Werten zu tun public static void process(List<Integer> c) { // get input // print in reverse order }. § Diese Methode kann für ArrayList<Integer> und LinkedList<Integer> Examplare verwendet werden § Welche Klasse ist besser? 76.

(70) Das Kleingedruckte § LinkedList: get(index) braucht O(n) Zeit All of the operations perform as could be expected for a doubly-linked list. Opera;ons that index into the list will traverse the list from the beginning or the end, whichever is closer to the specified index.. § ArrayList: get(index) braucht O(1) Zeit The size, isEmpty, get, [and] set [..] operations run in constant time. The add operation runs in amortized constant time, that is, adding n elements requires O(n) time. All of the other operations run in linear time (roughly speaking). The constant factor is low compared to that for the LinkedList implementation. 77.

(71) Praktische Analyse § Müssen das Laufzeitverhalten für realistischen Input messen § Was ist “realistischer” Input?. § Zeitmessungen nicht einfach § Java System hat viele Komponenten (einige haben wir noch garnicht kennengelernt) und verschiedene Compiler § Einfache Messung gibt uns “end-to-end” Übersicht § System.currentTimeMillis() oder System.nanoTime() § Eingebaut 78.

(72) System.currentTimeMillis() § Gibt die Zeit (in ms) seit 00:00 , 1. Januar 1970. § Typ des Rückgabewertes ist long § Ein anderer Basistyp § Wie int nur mit einer Darstellung die mehr Bits (64) erfordert. § Kann wiederholt aufgerufen werden um die Ausführungszeit einer (genügend lange laufenden) Methode zu messen. 79.

(73) System.nanoTime() The java.lang.System.nanoTime() method returns the current value of the most precise available system timer, in nanoseconds. The value returned represents nanoseconds since some fixed but arbitrary time (perhaps in the future, so values may be negative) and provides nanosecond precision, but not necessarily nanosecond accuracy.. § Typ des Rückgabewertes ist long § Kann wiederholt aufgerufen werden um die Ausführungszeit einer (genügend lange laufenden) Methode zu messen. 80.

(74) ArrayList<Integer> arrayList = new ArrayList<Integer>(); long startTime = System.nanoTime();. for (int i = 0; i < 100000; i++) { arrayList.add(Integer.valueOf(i)); } long endTime = System.nanoTime(); long duration = endTime - startTime; System.out.println("ArrayList add:. " + duration);. 81.

(75) Beispiel -- Fortsetzung public static void process(List<Integer> c) { // get input // print in reverse order }. § Diese Methode kann für ArrayList<Integer> und LinkedList<Integer> Examplare verwendet werden § Welche Klasse ist besser?. 82.

(76) Beispiel – Messungen § 100'000 Integer Werte hinzufügen list.add(Integer.valueOf(i)). § Messungen. Klasse. Zeit (ns). LinkedList. 9'312'254. ArrayList. 11'972'638. §. Durchschnitt von 4 Ausführungen ( ! Vorsicht!! ). §. Intel(R) Xeon(R) CPU E5-4640 0 @ 2.40GHz, OpenJDK (1.8.0_161-b14). 83.

(77) 84.

(78) § Ernsthafte Evaluationen müssen viele Aspekte berücksichtigen § Mehrfache Ausführung des selben Programms § Durchschnitt (arithmetisch, harmonisch, geometrisch) § k-out-of-N. § Prozessoren sind komplex § Speicher Hierarchie § Echte Clock Rate. § Java Umgebung ist komplex. 85.

(79) Messungen § ArrayList (ms): Time (ns). § LinkedList (ms): Time (ns). 12'881'027. 8'711'755. 11'416'029. 10'547'642. 11'446'881. 9'001'888. 12'146'617. 8'987'733. Einfügen /Entfernen am Anfang geht sehr schnell in einer LinkedList – bei vielen anderen Operationen gewinnt die ArrayList haushoch. 86.

(80) Beispiel § Schreiben Sie ein Programm, das zählt wie viele verschiedene Wörter in einem Text auftauchen (z.B., Tolstois “Krieg und Frieden” [Война и мир] oder Goethes “Faust”). § Speichern Sie die Wörter in einer (An)Sammlung und geben Sie die Anzahl der aufgetretenen Wörter aus. § Sind “[das] Gute”, “gute”, “gut”, “guter”, “guten” verschieden? § Nach dem Einlesen des Textes sollte es möglich sein, festzustellen ob ein bestimmtes Wort im Text auftritt. 87.

(81) Beispiel § Input: Thomas Mann, Die Buddenbrooks, 1'602'177 Bytes § Quelle: Projekt Guttenberg. § Lesen der Datei, Einfügen in Collection. §. Klasse. Zeit (ms). LinkedList. 662. ArrayList. 615. Intel(R) Xeon(R) CPU E5-4640 0 @ 2.40GHz, OpenJDK (1.8.0_161-b14). 88.

(82) Messungen § Input: Thomas Mann, Die Buddenbrooks, 236'239 Wörter § Suche (1000 x, 18 Wörter) Klasse. Zeit (ms). LinkedList. 31'520. ArrayList. §. 8'083. Intel(R) Xeon(R) CPU E5-4640 0 @ 2.40GHz, OpenJDK (1.8.0_161-b14) 90.

(83) Java Collections Framework <<Interface> Map. <<Interface> Collection. <<Interface> List. <<Interface> Set. <<Interface> SortedMap. <<Interface> SortedSet. ArrayList. LinkedList. HashSet. TreeSet. HashMap. TreeMap. 93.

(84) Mengen § Menge ("set"): Eine Sammlung eindeutiger und einzigartiger Elemente (d.h., wir lassen keine Duplikate zu und können für 2 beliebige Elemente feststellen, ob sie gleich oder ungleich sind) für die folgende Operationen ausgeführt werden können: § Hinzufügen (add), Entfernen (remove), Suche (contains) § Bei einer Menge erwarten wir keinen Zugriff über einen Index und eine Reihenfolge spielt keine Rolle 94.

(85) set.contains("to") set.contains("be"). "if". "the" "to". "of". "down" "from" "by" "she" "you" "in" "why" "him". true false. Menge (set). 95.

(86) Set Implementierungen § In Java können Mengen durch Klassen, die das Set Interface (aus java.util) implementieren, dargestellt werden § Set wird durch die Klassen HashSet und TreeSet implementiert. 96.

(87) Set Implementierungen § HashSet: Implementierung basiert auf einem "hash table" mit einem Array der schnelle Zugriffe erlaubt : O(1) für alle Operationen (mit bestimmten Annahmen) § Elemente werden in irgendeiner (nicht bekannten) Reihenfolge gespeichert. § TreeSet: Implementierung basiert auf einem "binären Baum"; Zugriff ist ziemlich schnell: O(log N) für alle Operationen § Elemente sind sortiert gespeichert. § LinkedHashSet: Zugriff schnell O(1), speichert Elemente in der Reihenfolge in der sie in die Menge hinzugefügt wurden. 97.

(88) Hash Table (nur die Idee …). x 152. From: https://en.wikipedia.org/wiki/Hash_table. 98.

(89) Hash Table (nur die Idee …). From: https://en.wikipedia.org/wiki/Hash_table. 99.

(90) Beispiel § Thomas Mann, Die Buddenbrooks, 1'602'177 Bytes § Quelle: Projekt Guttenberg. § Suche (1000 x, 18 Wörter) Klasse. Zeit (ms). LinkedList. 31'520. ArrayList. §. 8'083. HashSet. 2. TreeSet. 10. Intel(R) Xeon(TM) CPU 2.40GHz. 101.

(91) Set Objekte List<String> list = new ArrayList<String>(); ... Set<Integer> set1 = new TreeSet<Integer>();. // empty. Set<String> set2 = new HashSet<String>(list);. § Es gibt den Defaultkonstruktor (liefert die leere Menge) und einen Konstrukor, der eine Menge basierend auf einer anderen Collection erstellt.. 102.

(92) Set Methoden adds the given value to the set contains(value) returns true if the given value is found in this set add(value). remove(value) clear(). removes the given value from the set. isEmpty(). removes all elements of the set returns true if the set's size is 0. toString(). returns a string such as "[3, 42, -7, 15]". 105.

(93) Operationen mit Mengen. addAll. retainAll. removeAll. addAll(collection). adds all elements from the given collection to this set. containsAll(coll). returns true if this set contains every element from given set. equals(set) iterator(). returns true if given other set contains the same elements. removeAll(coll). removes all elements in the given collection from this set. retainAll(coll) toArray(). removes elements not found in given collection from this set. returns an object used to examine set's contents (später mehr). returns an array of the elements in this set 106.

(94) Arbeiten mit Set Exemplaren List<String> list = new ArrayList<String>(); ... Set<String> set1 = new TreeSet<String>(list); Set<String> set2 = new HashSet<String>(list);. § Oft wissen wir nicht welche Art Set am besten ist § Daher wollen wir unsere Programme flexibel lassen. § Verwenden des Interfaces als Typ für Parameter und Attribute/Variable boolean method(Set<String> s) 108.

(95)

Referenzen

ÄHNLICHE DOKUMENTE

§ Programm: Folge von Anweisungen, die von einem Computer ausgeführt werden (können).. § Programm realisiert

ArrayList § Java stellt die Klasse ArrayList für solche Listenobjekte zur Verfügung § "Array" erinnert daran, dass die Elemente über einen Index erreicht werden können § Die Anzahl

§ Schiedsrichter entscheidet ob das Symbol legal ist oder nicht (für diese EBNF Beschreibung)2. § Symbol legal gemäss einer Regel: alle Buchstaben des Symbols stimmen mit den

set( index , value ) replaces value at given index with given value size() returns the number of elements in list.. toString() returns a string representation of the list such as

§ Definiert einen Loop über alle Elemente einer Ansammlung (z.B., Set , List – die Interface Collection implementieren) oder eines

Eine Programmiersprache sollte es möglichst einfach machen, ein Programm zu lesen. Was ist

§ Eine Aussage gilt für den Zustand eines Programms wenn die Auswertung der Aussage mit dem Zustand das Ergebnis true ergibt. § Die Auswertung jedes Variable ergibt den Wert

containsAll( coll ) returns true if this set contains every element from given set equals( set ) returns true if given other set contains the same elements iterator() returns