Lektion 6: Collections, Telefonbuchbeispiel 702 / 763

Ähnliche Dokumente
Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen?

Einfache Liste: Ein Stapel (Stack) Ansatz. Schaubild. Vorlesung 1. Handout S. 2. Die einfachste Form einer Liste ist ein Stapel (stack).

Problem: Was ist, wenn der Stapel voll ist? Idee: Erzeuge dynamisch ein grösseres Array und kopiere um. Dynamische Anpassung der Größe

Faulheit professionell: Fertige Datenbehälter. Das Java-Collections-Framework Typsicherheit Generische Klassen

Schein-/Bachelorklausur Teil 2 am Zulassung: Mindestens 14 Punkte in Teilklausur 1 und 50% der Übungspunkte aus dem 2. Übungsblock.

ADT: Java Collections und ArrayList

Programmieren 2 16 Java Collections und Generizität

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Rechtsbelehrung. Java und OOP Das Buch Christian Silberbauer 144

ALP II Dynamische Datenmengen Datenabstraktion

Programmieren in Java

Software Entwicklung 1

1 Abstrakte Datentypen

Informatik II Übung 5 Gruppe 3

Algorithmen und Programmierung III

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1

Methoden und Wrapperklassen

Aufgabe11. Methode test1. import java.util.hashmap; import java.util.arraylist; public class Aufgabe11 {

Algorithmen und Programmierung III

Versuchsziele Kenntnisse in der Anwendung von: Sortieren mit Klassen Benutzung von generischen Klassen o Definition o Sortierung.

Computeranwendung und Programmierung (CuP)

Javakurs für Anfänger

Javakurs für Anfänger

Stapel (Stack, Keller)

Probeklausur zur Vorlesung

Javakurs für Anfänger

II.4.4 Exceptions - 1 -

Aufgabenblatt 4. Aufgabe 3. Aufgabe 1. Aufgabe 2. Prof. Dr. Th. Letschert Algorithmen und Datenstrukturen

Programmierkurs Java

Programmieren 2 Übung Semesterwoche 2

JAVA KURS COLLECTION

Software Entwicklung 1

Felder - Arrays. Typ feldname[] = new Typ[<ganze Zahl >]; Beispiel: double vektor[] = new double[5]; auch eine Initialisierung ist möglich.

Durch die Möglichkeit, Ein- und Ausgaben auf der Konsole durchzuführen, kann man auch systematisch das Verhalten von Klassen analysieren.

Kapitel 3: Datentyp Keller und Schlange

Kapitel 4: Datentyp Keller und Schlange

55 Ring-Queue. size. push. clear. get. Reinhard Schiedermeier / Klaus Köhler, Das Java-Praktikum, dpunkt.verlag, ISBN

Einführung in die Programmierung

Schnittstellen, Stack und Queue

1 Polymorphie (Vielgestaltigkeit)

Einführung in die Programmierung

Software Entwicklung 1

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Aufgaben NF 11; Seite 1

16. Dynamische Datenstrukturen

Einführung in die Programmierung mit Java

Einführung in die Objektorientierte Programmierung Vorlesung 18: Lineare Datenstrukturen. Sebastian Küpper

Einstieg in die Informatik mit Java

Anregungen zu Übung 2

Counting - Sort [ [ ] [ [ ] 1. SS 2008 Datenstrukturen und Algorithmen Sortieren in linearer Zeit

Universität Karlsruhe (TH)

Java Einführung Collections

Ordnung im Materiallager: Datenstrukturen II. Suchen und Sortieren im Array Verkettete Listen Rekursion

Programmierstil. Objektsammlungen. Konzepte. Zwischenspiel: Einige beliebte Fehler... Variablennamen Kommentare Layout Einrückung

Wie entwerfe ich ein Programm?

Informatik II Übung, Woche 14

Objekttypen. Referenzen, Objekte, Gleichheit, Wrapper, Arrays, mehr-dimensionale Arrays, Bildbearbeitung, krumme Arrays

Fallstudie: Online-Statistik

Themen der Übung. Methoden und Wrapperklassen. Vorteile von Methoden. Methoden. Grundlagen

CoMa 04. Java II. Paul Boeck. 7. Mai Humboldt Universität zu Berlin Institut für Mathematik. Paul Boeck CoMa 04 7.

3.8 Objekttypen und Arrays. Wir werden uns in diesem Kapitel näher mit den Objekttypen in Java beschäftigen.

Programmierkurs Java

Kapitel 5: Iterierbare Container

1 Einleitung Generizität Syntax... 2

1.2 Attribute und Methoden Aufbau einer Java-Klasse:

Abgabe: (vor 12 Uhr)

II.4.6 Collections - 1 -

5.14 Generics. Xiaoyi Jiang Informatik I Grundlagen der Programmierung

Übung Algorithmen und Datenstrukturen

Datenstrukturen / Container in Java

Beispielprüfung CuP WS 2015/2016

Selbststudium OOP7 & ALG2 Auftrag

C# - Einführung in die Programmiersprache Arrays, Enumeration und Collections. Leibniz Universität IT Services Anja Aue

1 Klassen anlegen und Objekte erzeugen

Heute. Nachbetrachtung Wissensüberprüfung. Sortieren Interface Comparable TreeSet Sortieren von Arrays: Arrays.sort() 3.12.

Kapitel 10. Programmierkurs. Grundlagen von Exceptions Behandlung von Exceptions

Informatik II Übung 06. Benjamin Hepp 5 April 2017

Institut für Programmierung und Reaktive Systeme 10. Mai Programmieren II. 11. Übungsblatt

7. Verkettete Strukturen: Listen

Schwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen

12.3 Ein Datenmodell für Listen

Konkatenation zweier Listen mit concat

Java Spickzettel von Panjutorials.de

ihrer Klasse benötigt die Funktion einfuegenan:

Propädeutikum Programmierung in der Bioinformatik

Hashmap: Video Erklärung

12 Abstrakte Klassen, finale Klassen und Interfaces

Institut für Programmierung und Reaktive Systeme 7. Mai Programmieren II. 11. Übungsblatt

Gliederung. 5. Compiler. 6. Sortieren und Suchen. 7. Graphen

Tag 4 Repetitorium Informatik (Java)

Einstieg in die Informatik mit Java

1 Klassen anlegen und Objekte erzeugen

Grundlagen der Objektorientierten Programmierung - Statische Arrays

Probeklausur Informatik 2 Sommersemester 2013

Philipp Güttler Progwerkstatt. Enums, Interfaces und Generics

Institut für Programmierung und Reaktive Systeme. Java 3. Markus Reschke

Transkript:

Lektion 6: Collections, Telefonbuchbeispiel 702 / 763

Beispiel: Telefonbuch Schreiben Sie eine Klasse, die bis zu maximal 20 Namen mit dazugehörigen Telefonnummern verwalten kann Funktionen: Name + Telefonnummer hinzufügen (anhängen) Liste nach Namen sortieren Hinweis: Zum Sortieren kann Selektion Sort (siehe oben) benutzt werden, wobei die Ordnung der Strings mit compareto ermittelt werden kann... 703 / 763

Beispiel: Telefonbuch public class Person { private String name; private int phone; //Custom-Konstruktor public Person (String name, int phone) { this.name = name; this.phone = phone; //Kopierkonstruktur public Person (Person p) { this.name = p.name; this.phone = p.phone;... 704 / 763

Beispiel: Telefonbuch public class Person {... public String getname() { return name; public int getphone () { return phone;... 705 / 763

Beispiel: Telefonbuch public class Person {... public String tostring() { return name+": "+phone; 706 / 763

Beispiel: Telefonbuch public class Phonebook { private static final int MAX_PERSON = 20; private Person[] entry = new Person[MAX_PERSON]; private int length = 0; public void add (Person p) throws PhonebookFullException { if (length == MAX_PERSON) throw new PhonebookFullException();... entry[length++] = new Person(p); 707 / 763

Beispiel: Telefonbuch public class Phonebook {... public void add (Person p) throws PhonebookFullException {...siehe oben public void add (String name, int phone) throws PhonebookFullException { if (length == MAX_PERSON) throw new PhonebookFullException(); entry[length++] = new Person(name, phone);... 708 / 763

Beispiel: Telefonbuch public class Phonebook {... public void sort () { for (int i=0; i<length; i++) { //Index mit kleinster Zahl suchen int minindex = i; for (int j=i+1; j<length; j++) { if (entry[minindex].getname(). compareto(entry[j].getname())>0) { minindex = j; //Tauschen Person min = entry[minindex]; entry[minindex] = entry[i]; entry[i] = min;... 709 / 763

Beispiel: Telefonbuch public class Phonebook {... public String tostring () { String ret=""; for (int i=0; i<length; i++) { ret += entry[i] + "\n"; return ret; 710 / 763

Beispiel: Telefonbuch public class Main { public static void main (String[] args) { try { Phonebook ph = new Phonebook(); ph.add("john", 13); ph.add("christiane",19); ph.add("peter", 12); ph.add("claudia", 51); ph.add("max", 52); System.out.println(ph); ph.sort(); System.out.println(ph); catch (PhonebookFullException ex) { System.out.println("FEHLER"); 711 / 763

Beispiel: Phonebook - Ausgabe D:\eprog\Telefonbuch>java Main John: 13 Christiane: 19 Peter: 12 Claudia: 51 Max: 52 Christiane: 19 Claudia: 51 John: 13 Max: 52 Peter: 12 712 / 763

Beispiel: Phonebook - Ausgabe public class Phonebook {... public boolean hasphone (String name) {... public int getphone (String name) { for (int i = 0; i< length; i++) { if(entry[i].getname().equals(name)) { return entry[i].getphone(); return 0;... 713 / 763

Collection-Klassen (Container-Klassen) & Maps zum Speichern einer Sammlung von Objekten des gleichen Typs (Elemente) Elemente sind anonym Elemente müssen Objekte sein (müssen Referenztyp haben, keine primitiven Typen) es gibt Methoden zum Lesen von Elementen (z.b. mit Index-Parameter) und zum Hinzufügen und Löschen von Elementen. Variierende Anzahl an Elementen (Länge der Liste wird dynamisch durch Anzahl der gespeicherten Elemente bestimmt). 714 / 763

ArrayList-Klasse ArrayList<Rational> rs = new ArrayList<Rational>(); rs.add(new Rational(1,2)); rs.add(new Rational(3,4)); rs.add(new Rational(1,9)); Angabe des Elementtyps Rational num denom Rational 1 2 3 4 num denom Rational 1 9 num denom... rs ArrayList<Rational>... 715 / 763

ArrayList-Klasse ArrayList<Rational> rs = new ArrayList<Rational>(); rs.add(new Rational(1,2)); rs.add(new Rational(3,4)); rs.add(new Rational(1,9)); Angabe des Elementtyps Rational num denom Rational 1 2 3 4 num denom Rational 1 9 num denom... rs ArrayList<Rational>... 716 / 763

ArrayList-Klasse Der ArrayList-Typ für einen Elementtyp T wird bezeichnet mit ArrayList<T> Beispiel für eine Liste mit 4 Elementen (Zeichenketten): ArrayList<String> sl = new ArrayList<String>(); sl.add("wir"); sl.add(null); sl.add("lernen"); sl.add("java!"); 717 / 763

ArrayList-Klasse: Methoden add(t elem): Neues Element an die Liste anhängen set(int i, T elem): i-tes Element mit elem-objekt ersetzen. T get(int i): liefert i-tes Element als Rückgabe. T remove(int i): i-tes Element löschen (Elemente i+1 bis zum Ende der Liste rücken nach, wie bei einem Bücherstabel, aus dem ein Buch herausgenommen wird). Liefert gelöschtes Element zurück. int size() liefert die Anzahl der Elemente (Länge) der Liste Weitere Methoden: siehe http://java.sun.com/j2se/1.5.0/docs/api/java/util/arraylist.html 718 / 763

ArrayList-Klasse: Methoden import java.util.arraylist; class RationalApp { public static void main (String [] args) { ArrayList<Rational> rs = new ArrayList<Rational>(); rs.add(new Rational(1,2)); rs.add(new Rational(2,3)); for (int i = 0; i<rs.size();i++) { System.out.println(rs.get(i)); 719 / 763

ArrayList-Klasse public class Phonebook { private static final int MAX_PERSON = 20; private Person[] entry = new Person[MAX_PERSON]; private int length = 0; public void add (Person p) throws PhonebookFullException { if (length == MAX_PERSON) throw new PhonebookFullException();... entry[length++] = new Person(p); 720 / 763

ArrayList-Klasse public class Phonebook { private ArrayList<Person> entry = new ArrayList<Person>(); public void add (Person p) { entry.add(new Person(p));... 721 / 763

Beispiel: Telefonbuch public class Phonebook {... public void sort () { for (int i=0; i<length; i++) { //Index mit kleinster Zahl suchen int minindex = i; for (int j=i+1; j<length; j++) { if (entry[minindex].getname(). compareto(entry[j].getname())>0) { minindex = j; //Tauschen Person min = entry[minindex]; entry[minindex] = entry[i]; entry[i] = min;... 722 / 763

Beispiel: Telefonbuch public class Phonebook {... public void sort () { for (int i=0; i<entry.size(); i++) { //Index mit kleinster Zahl suchen int minindex = i; for (int j=i+1; j<entry.size(); j++) { if (entry.get(minindex).getname(). compareto(entry.get(j).getname())>0) { minindex = j; //Tauschen Person min = entry.get(minindex); entry.set(minindex,entry.get(i)); entry.set(i,min);... 723 / 763

ArrayList-Klasse Array ArrayList Definition String[] a; ArrayList<String> a; Erzeugen a = new String[20]; a = new ArrayList<String>(); Schreiben a[i] = "Java"; a.set(i, "Java"); Lesen String s = a[i]; String s = a.get(i); Löschen - a.remove("java"); a.remove(i); Länge der Liste - a.size(); String kann oben durch einen beliebigen Referenztyp (z.b. Person, Complex, Double...) ersetzt werden weitere Methoden siehe: http://java.sun.com/j2se/1.5.0/docs/api/java/util/arraylist.html 724 / 763

Wrapper-Klassen stehen für alle primitiven Datentypen zur Verfügung Benutzung: dort wo Referenztypen erwartet werden, z.b. zum Speichern in Collections Hüll-Objekte (Referenztyp!) um den primitiven Wert stellen zusätzliche Methoden zur Verfügung Beispiel intobj 42 Objekt Integer intobj = new Integer(42); 725 / 763

Wrapper-Klassen Beispiele: Integer iobj = new Integer(42); int i = iobj.intvalue(); //Methode liefert primitiven int-wert Double dobj = new Double(3.14); double d = dobj.doublevalue(); //liefert primitiven Wert 726 / 763

Wrapper-Klassen primitiver Typ Wrapper-Klasse int Integer double Double char Character... 727 / 763

Autoboxing Wenn ein primitiver Wert eingesetzt wird wo ein Objekt erwartet wird, wird der Wert implizit in ein Wrapperobjekt verpackt Autoboxing fügt automatisch einen Konstruktoraufruf ein Integer intobj = 42; ist zulässig und wird automatisch als Integer intobj = new Integer(42); interpretiert. 728 / 763

Autoboxing Wenn ein Wrapper-Objekt zur Verfügung steht wo ein primitiver Wert erwartet wird, wird automatisch ein Getter-Aufruf eingefügt int i = intobj; ist zulässig und wird automatisch als int i = intobj.intvalue(); interpretiert. 729 / 763

Die Klasse Stack Stack ist ebenfalls eine Collection-Klasse Speichert auch als Elemente Objekte (z.b. Complex, Rational, Integer, Double,...) Elementtyp wird wieder mit Typparameter festgelegt stellt Standard Collection-Methoden, wie add, get zur Verfügung hat aber auch Methoden push: neues Element auf den Stapel legen pop: Oberstes Element vom Stapel nehmen und zurückliefern 730 / 763

Die Klasse Stack Funktioniert nach dem Last In First Out -Prinzip (LIFO) wie ein Stapel Ein Tellerspender: nur auf den obersten Teller kann zugegriffen werden 731 / 763

Die Klasse Stack Stack<Integer> s = new Stack<Integer>(); s.push(new Integer(3)); s.push(new Integer(2)); s.push(new Integer(-5)); int op2 = s.pop().intvalue(); int op1 = s.pop().intvalue(); s.push(integer(op1 + op2)); op2 = s.pop().intvalue(); op1 = s.pop().intvalue(); s.push(integer(op1 - op2)); oben auf dem Stapel liegt jetzt: 3 (2 + 5) = 6 Berechnung mit UPN-Rechner: 3 2-5 + - 732 / 763

Die Klasse Stack Stack<Integer> s = new Stack<Integer>(); s.push(new Integer(3)); s.push(new Integer(2)); s.push(new Integer(-5)); int op2 = s.pop().intvalue(); int op1 = s.pop().intvalue(); s.push(integer(op1 + op2)); op2 = s.pop().intvalue(); op1 = s.pop().intvalue(); s.push(integer(op1 - op2)); oben auf dem Stapel liegt jetzt: 3 3 (2 + 5) = 6 Berechnung mit UPN-Rechner: 3 2-5 + - 733 / 763

Die Klasse Stack Stack<Integer> s = new Stack<Integer>(); s.push(new Integer(3)); s.push(new Integer(2)); s.push(new Integer(-5)); int op2 = s.pop().intvalue(); int op1 = s.pop().intvalue(); s.push(integer(op1 + op2)); op2 = s.pop().intvalue(); op1 = s.pop().intvalue(); s.push(integer(op1 - op2)); oben auf dem Stapel liegt jetzt: 2 3 3 (2 + 5) = 6 Berechnung mit UPN-Rechner: 3 2-5 + - 734 / 763

Die Klasse Stack Stack<Integer> s = new Stack<Integer>(); s.push(new Integer(3)); s.push(new Integer(2)); s.push(new Integer(-5)); int op2 = s.pop().intvalue(); int op1 = s.pop().intvalue(); s.push(integer(op1 + op2)); op2 = s.pop().intvalue(); op1 = s.pop().intvalue(); s.push(integer(op1 - op2)); oben auf dem Stapel liegt jetzt: -5 2 3 3 (2 + 5) = 6 Berechnung mit UPN-Rechner: 3 2-5 + - 735 / 763

Die Klasse Stack Stack<Integer> s = new Stack<Integer>(); s.push(new Integer(3)); s.push(new Integer(2)); s.push(new Integer(-5)); int op2 = s.pop().intvalue(); int op1 = s.pop().intvalue(); s.push(integer(op1 + op2)); op2 = s.pop().intvalue(); op1 = s.pop().intvalue(); s.push(integer(op1 - op2)); oben auf dem Stapel liegt jetzt: 2 3 3 (2 + 5) = 6 Berechnung mit UPN-Rechner: 3 2-5 + - 736 / 763

Die Klasse Stack Stack<Integer> s = new Stack<Integer>(); s.push(new Integer(3)); s.push(new Integer(2)); s.push(new Integer(-5)); int op2 = s.pop().intvalue(); int op1 = s.pop().intvalue(); s.push(integer(op1 + op2)); op2 = s.pop().intvalue(); op1 = s.pop().intvalue(); s.push(integer(op1 - op2)); oben auf dem Stapel liegt jetzt: 3 3 (2 + 5) = 6 Berechnung mit UPN-Rechner: 3 2-5 + - 737 / 763

Die Klasse Stack Stack<Integer> s = new Stack<Integer>(); s.push(new Integer(3)); s.push(new Integer(2)); s.push(new Integer(-5)); int op2 = s.pop().intvalue(); int op1 = s.pop().intvalue(); s.push(integer(op1 + op2)); op2 = s.pop().intvalue(); op1 = s.pop().intvalue(); s.push(integer(op1 - op2)); oben auf dem Stapel liegt jetzt: -3 3 3 (2 + 5) = 6 Berechnung mit UPN-Rechner: 3 2-5 + - 738 / 763

Die Klasse Stack Stack<Integer> s = new Stack<Integer>(); s.push(new Integer(3)); s.push(new Integer(2)); s.push(new Integer(-5)); int op2 = s.pop().intvalue(); int op1 = s.pop().intvalue(); s.push(integer(op1 + op2)); op2 = s.pop().intvalue(); op1 = s.pop().intvalue(); s.push(integer(op1 - op2)); oben auf dem Stapel liegt jetzt: 3 3 (2 + 5) = 6 Berechnung mit UPN-Rechner: 3 2-5 + - 739 / 763

Die Klasse Stack Stack<Integer> s = new Stack<Integer>(); s.push(new Integer(3)); s.push(new Integer(2)); s.push(new Integer(-5)); int op2 = s.pop().intvalue(); int op1 = s.pop().intvalue(); s.push(integer(op1 + op2)); op2 = s.pop().intvalue(); op1 = s.pop().intvalue(); s.push(integer(op1 - op2)); oben auf dem Stapel liegt jetzt: 3 (2 + 5) = 6 Berechnung mit UPN-Rechner: 3 2-5 + - 740 / 763

Die Klasse Stack Stack<Integer> s = new Stack<Integer>(); s.push(new Integer(3)); s.push(new Integer(2)); s.push(new Integer(-5)); int op2 = s.pop().intvalue(); int op1 = s.pop().intvalue(); s.push(integer(op1 + op2)); op2 = s.pop().intvalue(); op1 = s.pop().intvalue(); s.push(integer(op1 - op2)); oben auf dem Stapel liegt jetzt: 6 3 (2 + 5) = 6 Berechnung mit UPN-Rechner: 3 2-5 + - 741 / 763

Die Klasse Stack - Autoboxing Stack<Integer> s = new Stack<Integer>(); s.push(3); s.push(2); s.push(-5); int op2 = s.pop(); int op1 = s.pop(); s.push(op1 + op2); op2 = s.pop(); op1 = s.pop(); s.push(op1 - op2); Funktioniert auch so Dank Autoboxing 742 / 763

Die Klasse Stack - Autoboxing Stack<String> s = new Stack<String>(); s.push("!"); s.push("java"); Funktioniert auch s.push("lernen"); für String-Objekte s.push("wir"); String info1 = s.pop(); String info2 = s.pop(); System.out.println(info1 + info2); //wirlernen 743 / 763

Die Klasse Stack - Autoboxing Stack<Double> s = new Stack<Double>(); s.push(1.2); s.push(3d); s.push(1.0); s.push(4.5); double zahl1 = s.pop(); double zahl2 = s.pop(); System.out.println(zahl1 + zahl2); //5.5 und auch für Double- Objekte 744 / 763

Die Klasse Stack - Autoboxing Autoboxing macht keine implizite Typumwandlung import java.util.*; public class Main { public static void main (String [] args) { Stack<Double> s = new Stack<Double>(); s.push(1.2); s.push(3); //Fehler 745 / 763