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());
}
}
Top Related