Datenstrukturen in Java -...

Preview:

Citation preview

Datenstrukturen in Java

Dr. Horst TreiblmaierAbteilung für Wirtschaftsinformatik

WU Wien

Datenstrukturen

Containerklassen

Datenstrukturen

Arrays

MapsCollections

• List

• Set

ArrayList

LinkedList

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();

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.

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]);

}

}

}

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.

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]);

}

}

}

}

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

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);

}

}

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

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

ArrayList1 Beispiel (A)

class Student {

String name;

Student(String wert) {

name = wert;

}

void schreibeName() {

System.out.println(name);

}

}

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

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.

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;

}

}

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);

}

}

}

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

LinkedList1 Beispiel (A)

class Freunde {

String name;

int telefonnummer;

Freunde (String name, int telefonnummer) {

this.name = name;

this.telefonnummer = telefonnummer;

}

}

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);

}

}

}

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);

}

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.

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;

}

}

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);

}

}

}

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);

}

}

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.

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);

}

}

Map

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

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

Schlüssel Objekt

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)

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);

}

}

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.

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());

}

}

Recommended