Datenstrukturen in Java

Werbung
Datenstrukturen in Java
Dr. Horst Treiblmaier
Abteilung für Wirtschaftsinformatik
WU Wien
Datenstrukturen
Datenstrukturen
Arrays
Containerklassen
Collections
• List
• Set
ArrayList
LinkedList
Maps
Arrays (Wiederholung)
n
Datenelemente oder Objekte eines
Datentyps
auf dessen einzelne Elemente mit
Integer-Indizes zugegriffen werden
kann
Deklaration:
n
Instanziierung (bei Objektdatentypen):
n
n
Datentyp[] variablenname = new Datentyp[länge]
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ösung
import 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ösung
import 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ösung
import 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 aufgefasst
werden das beliebig erweitert werden kann.
• Die Klasse ArrayList findet sich im Paket
java.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[]) {
Erzeugen einer ArrayList
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++) {
Hinzufügen der Teilnehmer
((Student)teilnehmer.get(i)).schreibeName();
}
}
}
Auslesen der Teilnehmer.
Explizites Casting(!) der Objekte
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)
add (int i, Object o)
boolean remove(int i)
boolean remove(Object o)
int indexOf(Object o)
int lastIndexOf(Object o)
Object get(int index)
Einfügen von o am Ende
Einfügen an Postion i
Löschen des Objekts an der Stelle i
Löschen des Objekts o
Erstes Auftreten von Objekt o
Letztes Auftreten von Objekt o
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);
}
}
}
Set
Kann 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ösung
import 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 – Objekt
Paare von Daten werden in Tabellen abgelegt
z.B.
good
--gut
bad
--schlecht
young
--jung
old
--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 Beispiel
import 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());
}
}
Herunterladen