31
Datenstrukturen in Java Dr. Horst Treiblmaier Abteilung für Wirtschaftsinformatik WU Wien

Datenstrukturen in Java - wi.wu-wien.ac.atwi.wu-wien.ac.at/studium/Abschnitt_2/LVA_ss03/treiblmaier_Java... · ArrayBeispiel1 Aufgabe Verwenden Sie die Methode fill der Klasse Arrays

Embed Size (px)

Citation preview

Page 1: Datenstrukturen in Java - wi.wu-wien.ac.atwi.wu-wien.ac.at/studium/Abschnitt_2/LVA_ss03/treiblmaier_Java... · ArrayBeispiel1 Aufgabe Verwenden Sie die Methode fill der Klasse Arrays

Datenstrukturen in Java

Dr. Horst TreiblmaierAbteilung für Wirtschaftsinformatik

WU Wien

Page 2: Datenstrukturen in Java - wi.wu-wien.ac.atwi.wu-wien.ac.at/studium/Abschnitt_2/LVA_ss03/treiblmaier_Java... · ArrayBeispiel1 Aufgabe Verwenden Sie die Methode fill der Klasse Arrays

Datenstrukturen

Containerklassen

Datenstrukturen

Arrays

MapsCollections

• List

• Set

ArrayList

LinkedList

Page 3: Datenstrukturen in Java - wi.wu-wien.ac.atwi.wu-wien.ac.at/studium/Abschnitt_2/LVA_ss03/treiblmaier_Java... · ArrayBeispiel1 Aufgabe Verwenden Sie die Methode fill der Klasse Arrays

Arrays (Wiederholung)n Datenelemente oder Objekte eines

Datentypsn auf dessen einzelne Elemente mit

Integer-Indizes zugegriffen werden kann

n Deklaration: Datentyp[] variablenname = new Datentyp[länge]

n Instanziierung (bei Objektdatentypen):variablenname[] = new Klasse();

Page 4: Datenstrukturen in Java - wi.wu-wien.ac.atwi.wu-wien.ac.at/studium/Abschnitt_2/LVA_ss03/treiblmaier_Java... · ArrayBeispiel1 Aufgabe Verwenden Sie die Methode fill der Klasse Arrays

ArrayBeispiel1 Aufgabe

Verwenden Sie die Methode fill der Klasse Arrays (im Paket java.util um ein int-Array der Länge 10 mit dem Wert 7 füllen.Geben Sie dann das Array aus.

Page 5: Datenstrukturen in Java - wi.wu-wien.ac.atwi.wu-wien.ac.at/studium/Abschnitt_2/LVA_ss03/treiblmaier_Java... · ArrayBeispiel1 Aufgabe Verwenden Sie die Methode fill der Klasse Arrays

ArrayBeispiel1 Lösungimport java.util.*;

public class ArrayBeispiel1 {

public static void main(String args[]) {

int[] werte = new int[4];

for (int i = 0; i < werte.length; i++) {

Arrays.fill(werte, 7);

}

for (int i = 0; i < werte.length; i++) {

System.out.println(werte[i]);

}

}

}

Page 6: Datenstrukturen in Java - wi.wu-wien.ac.atwi.wu-wien.ac.at/studium/Abschnitt_2/LVA_ss03/treiblmaier_Java... · ArrayBeispiel1 Aufgabe Verwenden Sie die Methode fill der Klasse Arrays

ArrayBeispiel2 Aufgabe

Verwenden Sie die Methode sort der Klasse Arrays im Paket java.util um ein int-Array der Länge 4 zu sortieren. Geben Sie das Array dabei vor und nach dem Sortieren aus. (Anmerkung: füllen Sie das Array vorher mit beliebigen Werten).Geben Sie dann das Array aus.

Page 7: Datenstrukturen in Java - wi.wu-wien.ac.atwi.wu-wien.ac.at/studium/Abschnitt_2/LVA_ss03/treiblmaier_Java... · ArrayBeispiel1 Aufgabe Verwenden Sie die Methode fill der Klasse Arrays

ArrayBeispiel2 Lösungimport java.util.*;

class ArrayBeispiel2 {

public static void main(String args[]) {

int[] werte = new int[4];

werte[0] = 6;

werte[1] = 3;

werte[2] = 9;

werte[3] = 1;

for (int i = 0; i <= 3; i++) {

System.out.println("Vor dem Sortieren: " + werte[i]);

}

Arrays.sort(werte);

for (int i = 0; i <=3; i++) {{

System.out.println("Nach dem Sortieren: " + werte[i]);

}

}

}

}

Page 8: Datenstrukturen in Java - wi.wu-wien.ac.atwi.wu-wien.ac.at/studium/Abschnitt_2/LVA_ss03/treiblmaier_Java... · ArrayBeispiel1 Aufgabe Verwenden Sie die Methode fill der Klasse Arrays

ArrayBeispiel3 Aufgabe

Verwenden Sie die Methode binarySearch der Klasse Arrays im Paket java.util um ein int-Array der Länge 6 zu durchsuchen. (Anmerkung: füllen Sie das Array mit beliebigen Werten und sortieren Sie diese. Geben Sie die Ergebnisse vorher und nachher aus.). Geben Sie dann die gesuchte Stelle aus wobei sie selbst einen Suchwert auswählen

Page 9: Datenstrukturen in Java - wi.wu-wien.ac.atwi.wu-wien.ac.at/studium/Abschnitt_2/LVA_ss03/treiblmaier_Java... · ArrayBeispiel1 Aufgabe Verwenden Sie die Methode fill der Klasse Arrays

ArrayBeispiel3 Lösungimport java.util.*;

class ArrayBeispiel3 {

public static void main(String args[]) {

int[] werte = new int[4];

werte[0] = 6;

werte[1] = 4;

werte[2] = 8;

werte[3] = 2;

System.out.println("Vor dem Sortieren: ");

for (int i = 0; i <werte.length; i++) {

System.out.println(werte[i]);

}

Arrays.sort(werte);

System.out.println("Nach dem Sortieren: ");

for (int i = 0; i <werte.length; i++) {

System.out.println(werte[i]);

}

int gesuchteStelle = Arrays.binarySearch(werte, 6);

System.out.println("Wert an der Stelle " + gesuchteStelle);

}

}

Page 10: Datenstrukturen in Java - wi.wu-wien.ac.atwi.wu-wien.ac.at/studium/Abschnitt_2/LVA_ss03/treiblmaier_Java... · ArrayBeispiel1 Aufgabe Verwenden Sie die Methode fill der Klasse Arrays

List

• ArrayList: Liste als Array implementiert, schneller Zugriff (Indizierung), aber langsames Einfügen und Löschen• LinkedList: Verkettete Liste, langsamer Zugriff, aber schnelles Einfügen und Löschen

Page 11: Datenstrukturen in Java - wi.wu-wien.ac.atwi.wu-wien.ac.at/studium/Abschnitt_2/LVA_ss03/treiblmaier_Java... · ArrayBeispiel1 Aufgabe Verwenden Sie die Methode fill der Klasse Arrays

ArrayList

• Eine ArrayList kann als Array aufgefasstwerden das beliebig erweitert werden kann.

• Die Klasse ArrayList findet sich im Paketjava.util.

• In einer ArrayList befinden sich nur Objekte.• add() fügt ein Objekt dazu• get(int index) holt ein Objekt aus der List• remove(int index) entfernt ein Objekt.• size() zeigt die Länge an

Page 12: Datenstrukturen in Java - wi.wu-wien.ac.atwi.wu-wien.ac.at/studium/Abschnitt_2/LVA_ss03/treiblmaier_Java... · ArrayBeispiel1 Aufgabe Verwenden Sie die Methode fill der Klasse Arrays

ArrayList1 Beispiel (A)

class Student {

String name;

Student(String wert) {

name = wert;

}

void schreibeName() {

System.out.println(name);

}

}

Page 13: Datenstrukturen in Java - wi.wu-wien.ac.atwi.wu-wien.ac.at/studium/Abschnitt_2/LVA_ss03/treiblmaier_Java... · ArrayBeispiel1 Aufgabe Verwenden Sie die Methode fill der Klasse Arrays

ArrayList1 Beispiel (B)

import java.util.*;

public class ArrayList1 {

public static void main (String args[]) {

Student anna = new Student("Anna");

Student paul = new Student("Paul");

ArrayList teilnehmer = new ArrayList();

teilnehmer.add(anna);

teilnehmer.add(paul);

for (int i = 0; i < teilnehmer.size(); i++) {

((Student)teilnehmer.get(i)).schreibeName();

}

}

}

Erzeugen einer ArrayList

Auslesen der Teilnehmer.Explizites Casting(!) der Objekte

Hinzufügen der Teilnehmer

Page 14: Datenstrukturen in Java - wi.wu-wien.ac.atwi.wu-wien.ac.at/studium/Abschnitt_2/LVA_ss03/treiblmaier_Java... · ArrayBeispiel1 Aufgabe Verwenden Sie die Methode fill der Klasse Arrays

ArrayList2 Aufgabe

Erstellen Sie ein Klasse Musiker mit einem Konstruktor Musiker ("Name", "Song");Zusätzlich solle es zwei Methoden geben welche es ermöglichen den Namen bzw. den Song auszulesen (zeigeName(), zeigeSong()).Erstellen Sie in einer anderen Klasse eine ArrayList namens meineMusiker in welcher Sie dann 3 Künstler samt deren Songs eingeben. Lesen Sie diese Daten mit einer for-Schleife wieder aus.

Page 15: Datenstrukturen in Java - wi.wu-wien.ac.atwi.wu-wien.ac.at/studium/Abschnitt_2/LVA_ss03/treiblmaier_Java... · ArrayBeispiel1 Aufgabe Verwenden Sie die Methode fill der Klasse Arrays

ArrayList2 Lösung (A)public class Musiker {

String name, song;

Musiker(String name, String song) {

this.name = name;

this.song = song;

}

String zeigeName() {

return name;

}

String zeigeSong() {

return song;

}

}

Page 16: Datenstrukturen in Java - wi.wu-wien.ac.atwi.wu-wien.ac.at/studium/Abschnitt_2/LVA_ss03/treiblmaier_Java... · ArrayBeispiel1 Aufgabe Verwenden Sie die Methode fill der Klasse Arrays

ArrayList2 Lösung (B)

import java.util.*;

public class ArrayList2 {

public static void main(String args[]) {

ArrayList meineMusiker = new ArrayList();

meineMusiker.add(new Musiker("Williams", "Feel"));

meineMusiker.add(new Musiker("Flames", "Everytime"));

meineMusiker.add(new Musiker("U2", "Pride"));

for (int i = 0; i < meineMusiker.size(); i++) {

String name = ((Musiker)meineMusiker.get(i)).zeigeName();

System.out.println(name);

String song = ((Musiker)meineMusiker.get(i)).zeigeSong();

System.out.println(song);

}

}

}

Page 17: Datenstrukturen in Java - wi.wu-wien.ac.atwi.wu-wien.ac.at/studium/Abschnitt_2/LVA_ss03/treiblmaier_Java... · ArrayBeispiel1 Aufgabe Verwenden Sie die Methode fill der Klasse Arrays

LinkedList

boolean add(Object o) Einfügen von o am Endeadd (int i, Object o) Einfügen an Postion iboolean remove(int i) Löschen des Objekts an der Stelle iboolean remove(Object o) Löschen des Objekts oint indexOf(Object o) Erstes Auftreten von Objekt oint lastIndexOf(Object o) Letztes Auftreten von Objekt oObject get(int index) Liefert das Objekt der Stelle

index zurück

Page 18: Datenstrukturen in Java - wi.wu-wien.ac.atwi.wu-wien.ac.at/studium/Abschnitt_2/LVA_ss03/treiblmaier_Java... · ArrayBeispiel1 Aufgabe Verwenden Sie die Methode fill der Klasse Arrays

LinkedList1 Beispiel (A)

class Freunde {

String name;

int telefonnummer;

Freunde (String name, int telefonnummer) {

this.name = name;

this.telefonnummer = telefonnummer;

}

}

Page 19: Datenstrukturen in Java - wi.wu-wien.ac.atwi.wu-wien.ac.at/studium/Abschnitt_2/LVA_ss03/treiblmaier_Java... · ArrayBeispiel1 Aufgabe Verwenden Sie die Methode fill der Klasse Arrays

LinkedList1 Beispiel (B)import java.util.*;

class LinkedList1 {

public static void main(String args[]) {

LinkedList meineListe= new LinkedList();

Freunde aktuellesObjekt = new Freunde("Anton", 7324882);

meineListe.add(aktuellesObjekt);

aktuellesObjekt = new Freunde("Berta", 3547698);

meineListe.add(aktuellesObjekt);

aktuellesObjekt = new Freunde("Caesar", 3469273);

meineListe.add(aktuellesObjekt);

for (int i = 0; i < meineListe.size(); i++) {

aktuellesObjekt = (Freunde)meineListe.get(i);

System.out.println(aktuellesObjekt.name);

System.out.println(aktuellesObjekt.telefonnummer);

}

}

}

Page 20: Datenstrukturen in Java - wi.wu-wien.ac.atwi.wu-wien.ac.at/studium/Abschnitt_2/LVA_ss03/treiblmaier_Java... · ArrayBeispiel1 Aufgabe Verwenden Sie die Methode fill der Klasse Arrays

LinkedList1 Beispiel (C)

Einfügen eines Elements innerhalb der Liste

aktuellesObjekt = new Freunde("Baula", 5268833);

meineListe.add(1, aktuellesObjekt);

for (int i = 0; i < meineListe.size(); i++) {

aktuellesObjekt = (Freunde)meineListe.get(i);

System.out.println(aktuellesObjekt.name);

System.out.println(aktuellesObjekt.telefonnummer);

}

Page 21: Datenstrukturen in Java - wi.wu-wien.ac.atwi.wu-wien.ac.at/studium/Abschnitt_2/LVA_ss03/treiblmaier_Java... · ArrayBeispiel1 Aufgabe Verwenden Sie die Methode fill der Klasse Arrays

LinkedList2 Aufgabe

Erstellen Sie ein Klasse Nobelpreistraeger mit einem Konstruktor Musiker ("Name", "Kategorie");

Zusätzlich solle es zwei Methoden geben welche es ermöglichen den Namen bzw. die Kategorie auszulesen (zeigeName(), zeigeKategorie()).

Erstellen Sie in einer anderen Klasse eine LinkedList namens meineNobelpreistraeger in welcher Sie dann 3 Nobelpreisträger samt deren Kategorie eingeben. Lesen Sie diese Daten mit einer for-Schleife wieder aus.

Page 22: Datenstrukturen in Java - wi.wu-wien.ac.atwi.wu-wien.ac.at/studium/Abschnitt_2/LVA_ss03/treiblmaier_Java... · ArrayBeispiel1 Aufgabe Verwenden Sie die Methode fill der Klasse Arrays

LinkedList2 Lösung (A)public class Nobelpreistraeger {

String name;

String kategorie;

Nobelpreistraeger(String name, String kategorie) {

this.name = name;

this.kategorie = kategorie;

}

String zeigeName() {

return name;

}

String zeigeKategorie() {

return kategorie;

}

}

Page 23: Datenstrukturen in Java - wi.wu-wien.ac.atwi.wu-wien.ac.at/studium/Abschnitt_2/LVA_ss03/treiblmaier_Java... · ArrayBeispiel1 Aufgabe Verwenden Sie die Methode fill der Klasse Arrays

LinkedList2 Lösung (B)import java.util.*;

public class LinkedList2 {

public static void main (String args[]) {

LinkedList nobelpreise = new LinkedList();

Nobelpreistraeger meinNobelpreistraeger = new Nobelpreistraeger("Carter", "Frieden");

nobelpreise.add(meinNobelpreistraeger);

meinNobelpreistraeger = new Nobelpreistraeger ("Grass", "Literatur");

nobelpreise.add(meinNobelpreistraeger);

nobelpreise.add(new Nobelpreistraeger("Kahneman", "Wirtschaft"));

for(int i = 0; i<nobelpreise.size(); i++) {

String derName = ((Nobelpreistraeger)nobelpreise.get(i)).zeigeName();

System.out.print(derName + ": ");

String dieKategorie = ((Nobelpreistraeger)nobelpreise.get(i)).zeigeKategorie();

System.out.println(dieKategorie);

}

}

}

Page 24: Datenstrukturen in Java - wi.wu-wien.ac.atwi.wu-wien.ac.at/studium/Abschnitt_2/LVA_ss03/treiblmaier_Java... · ArrayBeispiel1 Aufgabe Verwenden Sie die Methode fill der Klasse Arrays

SetKann keine gleichen Objekte enthalten

import java.util.*;

class HashTest {

public static void main(String[] args) {

HashSet meinSet = new HashSet();

meinSet.add("eins");

meinSet.add("zwei");

meinSet.add("zwei");

System.out.println(meinSet);

}

}

Page 25: Datenstrukturen in Java - wi.wu-wien.ac.atwi.wu-wien.ac.at/studium/Abschnitt_2/LVA_ss03/treiblmaier_Java... · ArrayBeispiel1 Aufgabe Verwenden Sie die Methode fill der Klasse Arrays

HashSet Aufgabe

Erstellen Sie ein Klasse Lottozahlen in der Sie ein HashSet mit dem Namen zahlenpool verwenden. In diesen zahlenpool füllen Sie 6 Zufallszahlen zwischen 1 und 45 wobei keine Zahl doppelt vorkommen darf. Geben Sie dieses HashSet anschließend aus.

Tipps:1) Die Methode add() der Klasse HashSet verlangt ein Objekt; d.h. sie müssen die

(int-)Zahlen vorher "verpacken" (=wrappen). Verwenden Sie dazu die Klasse Integer. 2) Nützen Sie den Rückgabewert der Methode add() um zu überprüfen ob das Element

bereits vorhanden ist. Holen Sie die notwendigen Informationen aus der Java API.3) Für die Ausgabe benutzen Sie die Methode System.out.println()

der sie das HashSet übergeben.

Page 26: Datenstrukturen in Java - wi.wu-wien.ac.atwi.wu-wien.ac.at/studium/Abschnitt_2/LVA_ss03/treiblmaier_Java... · ArrayBeispiel1 Aufgabe Verwenden Sie die Methode fill der Klasse Arrays

HashSet Lösungimport java.util.*;

class Lottozahlen {

public static void main(String[] args) {

boolean neueZahl;

int zahl, anzahl;

HashSet zahlenpool = new HashSet();

Integer aktuell;

anzahl = 0;

while(anzahl < 6) {

zahl = (int)((Math.random()*45)+1);

aktuell = new Integer(zahl);

neueZahl = zahlenpool.add(aktuell);

if(!neueZahl) {

continue;

}

anzahl++;

}

System.out.println("Die Lottozahlen:");

System.out.println(zahlenpool);

}

}

Page 27: Datenstrukturen in Java - wi.wu-wien.ac.atwi.wu-wien.ac.at/studium/Abschnitt_2/LVA_ss03/treiblmaier_Java... · ArrayBeispiel1 Aufgabe Verwenden Sie die Methode fill der Klasse Arrays

Map

Dienen der Verwaltung von Wertepaaren.Schlüssel – ObjektPaare von Daten werden in Tabellen abgelegtz.B.

good --- gutbad --- schlechtyoung --- jungold --- alt

Schlüssel Objekt

Page 28: Datenstrukturen in Java - wi.wu-wien.ac.atwi.wu-wien.ac.at/studium/Abschnitt_2/LVA_ss03/treiblmaier_Java... · ArrayBeispiel1 Aufgabe Verwenden Sie die Methode fill der Klasse Arrays

Map

Die Schlüssel müssen eindeutig sein.

Eingefügt wird mit der put()-Methode:put (Object key, Object value)

Aufgerufen wird mit der get()-Methode:Object get(Object key)

Page 29: Datenstrukturen in Java - wi.wu-wien.ac.atwi.wu-wien.ac.at/studium/Abschnitt_2/LVA_ss03/treiblmaier_Java... · ArrayBeispiel1 Aufgabe Verwenden Sie die Methode fill der Klasse Arrays

Map Beispielimport java.util.*;

public class Lexikon {

public static void main(String args[]) {

HashMap tabelle = new HashMap();

tabelle.put("good", "gut");

tabelle.put("bad", "schlecht");

tabelle.put("young", "jung");

tabelle.put("old", "alt");

String ergebnis1 = (String)tabelle.get("young");

System.out.println(ergebnis1);

String ergebnis2 = (String)tabelle.get("bad");

System.out.println(ergebnis2);

String ergebnis3 = (String)tabelle.get("hello");

System.out.println(ergebnis3);

}

}

Page 30: Datenstrukturen in Java - wi.wu-wien.ac.atwi.wu-wien.ac.at/studium/Abschnitt_2/LVA_ss03/treiblmaier_Java... · ArrayBeispiel1 Aufgabe Verwenden Sie die Methode fill der Klasse Arrays

Map Aufgabe

Erstellen Sie ein Klasse Buchliste in der Sie eine HashMap mit dem Namen meineListe verwenden. Geben Sie 3 Autoren (Nachnamen) und jeweils einen Buchtitel ein. Suchen Sie dann nach 2 Autoren und geben Sie den Namen des Autoren und den Buchtitel aus.

Geben Sie zusätzlich die Größe (=Länge) der Liste aus. Suchen Sie dazu aus der Java-API die geeignete Methode.

Page 31: Datenstrukturen in Java - wi.wu-wien.ac.atwi.wu-wien.ac.at/studium/Abschnitt_2/LVA_ss03/treiblmaier_Java... · ArrayBeispiel1 Aufgabe Verwenden Sie die Methode fill der Klasse Arrays

Map Lösung

import java.util.*;

public class Buchliste {

public static void main(String[] args) {

HashMap meineListe = new HashMap();

meineListe.put("Toole", "A Confederacy of Dunces");

meineListe.put("Grisham", "The King of Torts");

meineListe.put("Patterson", "Four Blind Mice");

System.out.println("Toole: " + (String)meineListe.get("Toole"));

System.out.println("Grisham: " + (String)meineListe.get("Grisham"));

System.out.println("Groesse der Liste: " + meineListe.size());

}

}