• Keine Ergebnisse gefunden

Programmierkurs Java iS

N/A
N/A
Protected

Academic year: 2021

Aktie "Programmierkurs Java iS"

Copied!
20
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

iS

Programmierkurs Java

UE 12 – Collections

(2)

iS

Gliederung

➢ Motivation

➢ Array

➢ ArrayList

➢ Stack

➢ Verkettete Liste

➢ LinkedList

➢ LinkedStack

(3)

iS

Motivation

➢ Collection = Sammlung von Werten/Elementen

➢ Kapselung bestimmter Datenstrukturen

➢ Liste: Zugriff über Index

➢ Set: keine Duplikate

➢ Stack: Zugriff nur auf jüngstes Element

➢ Queue: Zugriff nur auf ältestes Element

➢ Map: Key-Value-Paare

➢ Verschiedene Implementierungsmöglichkeiten

➢ „Dynamisches“ Array

➢ Verkettete Liste

➢ Effizienzbetrachtungen bei bestimmten Operationen

(4)

iS

Array

0 1 2 3 4 5

int[] zahlen = new int[6];

int nextIndex = 0;

...

Hinzufügen hinten: zahlen[nextIndex++] = 8;

Hinzufügen vorne:

verschieben von Index 0 bis nextIndex-1 um 1 nextIndex++;

zahlen[0] = 8;

Löschen an Index i:

verschieben von Index i+1 bis nextIndex-1 um -1 nextIndex--;

zahlen

nextIndex 3

12 34 67 0 0 0

Problem: Array hat feste Größe

(5)

iS

// gesucht (Testprogramm)

ArrayList list = new ArrayList();

for (int i = 0; i < 10; i++) { list.add(i);

list.add(i);

}

list.remove(5);

list.remove(9);

list.remove(0);

for (int i = 10; i < 20; i++) { list.add(i);

}

list.insert(1, 77);

for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i));

}

Klasse ArrayList (1)

(6)

iS

class ArrayList { int[] store;

int next;

ArrayList() { store = new int[8]; next = 0; } void add(int value) {

ensureCapacity();

store[next] = value; next++;

}

void ensureCapacity() {

if (next == store.length) {

int[] buffer = new int[store.length * 2];

for (int i = 0; i < store.length; i++) buffer[i] = store[i];

store = buffer;

} }

int size() { return next; }

Klasse ArrayList (2)

0 1

store

12 34

0 1 2 3

12 34 0 0

(7)

iS

void insert(int index, int value) { // without index check ensureCapacity();

for (int i = next; i > index; i--) store[i] = store[i - 1];

store[index] = value; next++;

}

void prepend(int value) { insert(0, value); } int get(int index) {

return store[index]; // without index check }

void remove(int value) {

for (int i = 0; i < next; i++) { if (store[i] == value) {

for (int j = i; j < next - 1; j++) store[j] = store[j + 1];

next--; i--;

} } } }

Klasse ArrayList (3)

(8)

iS

Stack

0 1 2 3 4 5

class Stack {

// kein Zugriff von außerhalb!

int[] zahlen = new int[6];

int nextIndex = 0;

...

// erlaubte Operationen

push(8): zahlen[nextIndex++] = 8;

pop(): return zahlen[--nextIndex];

}

zahlen

nextIndex 3

34 23 75 0 0 0

(9)

iS

// gesucht (Testprogramm)

public static void main(String[] args) { Stack stack = new Stack();

for (int i = 0; i < 10; i++) { stack.push(i);

}

while (!stack.isEmpty()) {

System.out.println(stack.pop());

} }

Klasse Stack (1)

(10)

iS

class Stack { // für int-Werte int[] store;

int next;

Stack() { store = new int[8]; next = 0; } void push(int value) {

ensureCapacity();

store[next] = value;

next++;

}

int pop() {

if (!isEmpty()) {

next--; return store[next];

}

return 0; // Fehler! spaeter via Exceptions }

Klasse Stack (2)

(11)

iS

boolean isEmpty() { return next == 0;

}

void ensureCapacity() {

if (next == store.length) {

int[] buffer = new int[store.length * 2];

for (int i = 0; i < store.length; i++) buffer[i] = store[i];

store = buffer;

} } }

Klasse Stack (3)

(12)

iS

Verkettete Liste

value class Element {

int value;

Element next;

}

class List {

Element first;

}

Hinzufügen (newElem):

suchen: elem.next == null elem.next = newElem;

Entfernen (oldElem):

suchen: prevElem mit prevElem.next == oldElem prevElem.next = oldElem.next;

next first 12

value next 34

value next 8

value next

4

null

(13)

iS

// gesucht (Testprogramm)

LinkedList list = new LinkedList();

for (int i = 0; i < 10; i++) { list.add(i);

list.add(i);

}

list.remove(5);

list.remove(9);

list.remove(0);

for (int i = 10; i < 20; i++) { list.add(i);

}

list.insert(1, 77);

for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i));

}

Klasse LinkedList (1)

(14)

iS

class ListElement { int value;

ListElement next;

ListElement(int v, ListElement n) { value = v;

next = n;

} }

class LinkedList { ListElement first;

LinkedList() { first = null;

}

void prepend(int value) {

first = new ListElement(value, first);

}

Klasse LinkedList (2)

(15)

iS

int size() {

int result = 0; ListElement elem = first;

while (elem != null) { result++; elem = elem.next; } return result;

}

void add(int value) {

if (first == null) first = new ListElement(value, null);

else {

ListElement elem = first;

while (elem.next != null) elem = elem.next;

elem.next = new ListElement(value, null);

} }

void insert(int index, int value) { // without index check if (index == 0) prepend(value);

else {

ListElement elem = first;

for (int i = 0; i < index - 1; i++) elem = elem.next;

elem.next = new ListElement(value, elem.next);

Klasse LinkedList (3)

(16)

iS

int get(int index) { // without index check ListElement elem = first;

for (int i = 0; i < index; i++) elem = elem.next;

return elem.value;

}

void remove(int value) {

ListElement before = null;

ListElement help = first;

while (help != null) {

if (help.value == value) if (before != null)

before.next = help.next;

else // Element == first first = help.next;

else

before = help;

help = help.next;

Klasse LinkedList (4)

(17)

iS

// gesucht (Testprogramm)

public static void main(String[] args) { LinkedStack stack = new LinkedStack();

for (int i = 0; i < 10; i++) { stack.push(i);

}

while (!stack.isEmpty()) {

System.out.println(stack.pop());

} } }

Klasse LinkedStack (1)

(18)

iS

class StackElement { int value;

StackElement next;

StackElement(int v, StackElement n) { value = v; next = n;

} }

class LinkedStack { StackElement top;

LinkedStack() { top = null; }

boolean isEmpty() { return top == null; }

Klasse LinkedStack (2)

top

value next 34

value next 8

value next 4

null

(19)

iS

void push(int value) {

top = new StackElement(value, top);

}

int pop() {

if (!this.isEmpty()) {

int result = top.value;

top = top.next;

return result;

}

return 0; // Fehler! spaeter via Exceptions }

Klasse LinkedStack (3)

(20)

iS

Zusammenfassung

➢ Collection = Sammlung von Werten/Elementen

➢ ArrayList = Liste mit „dynamischem“ Array

➢ LinkedList = Liste mit verketteten Elementen

➢ Stack = gekapselte Last-In-First-Out (LIFO) Datenstruktur

➢ Queue = gekapselte First-In-First-Out (FIFO) Datenstruktur

Referenzen

ÄHNLICHE DOKUMENTE

While putting all his energy on the third arrow of Abenomics, Abe’s immediate focus will be to introduce tough measures of structural reforms in order to revive Japan’s

„Bitte öfters solche Fortbildungen veran- stalten!“ Dies wünschten sich gleich meh- rere Teilnehmerinnen und Teilnehmer der Implant Wave 2018, einer Veranstaltung der Next e

wir haben sicher eine Menge Anlass, dann auf einen zurückliegenden Kon- gress anzustoßen, der auch für die jun- ge Implantologie-Generation ein Erleb- nis war!“ Er danke

Es ist immer ein Spagat zwischen ,gerade erst gelernt‘ und ,hat sich schon etab- liert‘ und den Anforderungen an eine verantwortungsvolle Patientenversor- gung.“ Die

Was die WHO mit ihrem neuen Report versucht, abge- stützt auf die Arbeit von beauftragten Wissenschaftlern sowie die Daten aus insgesamt 114 Ländern und über jeglichen

Solo- Selbstständigkeit bedeutet einerseits ein hohes Gestaltungspotenzial durch die Person selbst, wodurch Solo-Selbstständige auch eine hohe eigene Verantwortung für

To date, most efforts to control zoonotic diseases have been reactive rather than proactive. COVID-19 has made us all aware that it’s time to change that. To prevent future

Das strategische Ziel von TMap ist die Berücksichtigung aller vier Wirtschaftlichkeits- merkmale auch beim Testen: Ergebnis, Kosten, Zeit, und Risiko.. Der strategische Ansatz zu