11 - Dynamische Datenstrukturen und anonyme Klassen Flashcards

1
Q

Was sind dynamische Datenstrukturen?

A

Datenstrukturen, welche aus verketteten Objekten (Knoten) bestehen, werden als dynamisch bezeichnet, weil sie zur Laufzeit beliebig wachsen und schrumpfen können, ihre Größe nicht von vorneherein festgelegt ist und solange Speicher vorhanden ist, neue Knoten (mit new) erzeugt und an die Datenstruktur angehängt werden können.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Was sind Beispiele für dynamische Datenstrukturen?

A

Liste, Baum, Graph, Dictionary/Map

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Was sind Listen?

A

Bei einer Liste hat jeder Knoten eine Referenz auf den Nachfolger (außer der letzte Knoten).
O—>O—>O—>O—>O

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Was ist ein Baum?

A

Bei einem Baum kann jeder Knoten mehrere Referenzen auf Nachfolger haben.
O
Ó Ò
Ó Ò

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Was ist ein Graph?

A

Graphen sind ähnlich wie Bäume, allerdings kann ein Knoten auch mehrere Vorgänger haben.
O
Ó Ò
Ò´-Ó Ò

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Wozu werden Listen, Bäume und Graphen verwendet?

A

Listen, Bäume und Graphen werden in der Praxis zur Modellierung vieler Probleme eingesetzt.
- Liste: sortierte/unsortierte Liste von Daten, die sich verändern kann
- Baum: Dateisysteme,…
- Graph: Abläufe, Netzwerk,…

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Woraus besteht eine Liste?

A

Jedes Element einer Liste besteht aus einer Variable für die Nutzdaten und einer Referenz auf den nächsten Knoten. Zusätzlich gibt es eine Referenz auf den Beginn der Liste.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Was sind Collections?

A

Collections sind Container für andere Objekte (viele vordefinierte Klassen in der Java Bibliothek). Sie können für dynamische Daten verwendet werden und erlauben es, Knoten/Daten zu speichern, zu suchen, zu löschen usw. Normalerweise speichern sie Werte vom Typ Object, damit sie zu allen abgeleiteten Klassen kompatibel sind.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Was sind Generics?

A

Mit Generics kann man per Spitzklammern die Objekte in einer Collection auf einen bestimmten Typ festlegen. Beispiel:
Vector<String> strings = new Vector<String>();
strings.add("bla");
strings.add("bla");</String></String>

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Was ist ein Vector und was ist eine ArrayList?

A

Beide implementieren ein dynamisches Array (intern als statisches Array realisiert). Zunächst wird intern ein statisches Array mit einer bestimmten Größe erzeugt, das vergrößert wird, falls es zu klein ist (Vector: auf doppelte Größe; ArrayList: um Hälfte der aktuellen Größe). Es gibt Methoden zum Einfügen (add(…)), Indizieren (get(…) und set(…)), Löschen (remove(…)) und vieles mehr (size(), contains(…), clear()).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Was ist eine LinkedList?

A

Eine LinkedList ist eine doppelt verkettete Liste. Sie verbraucht mehr Speicher als eine ArrayList, ist aber schneller. Es gibt Methoden zum Einfügen (add, addFirst, addLast, push), Indizieren (get, set), Löschen (remove, removeFirst, removeLast) uvm. (size, contains, clear).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Was ist ein HashSet?

A

Ein HashSet ist eine unsortierte Menge von Elementen, wobei intern auch ein statisches Array sowie eine Hash-Funktion (um vom Wert den Index im Array zu ermitteln) verwendet wird. Es gibt Methoden zum Einfügen (add), Indizieren (direkt per Schlüssel/Iterator), Löschen (remove) uvm. (size, contains, clear).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Was ist eine Hash-Funktion?

A

Eine Hash-Funktion bildet einen beliebigen Datenraum auf Daten bestimmter Größe ab (z.B. auf 16 oder 256 Integer-Werte). Die Abbildung erfolgt möglichst gleichmäßig. Die Hash-Funktion ist dabei deterministisch und nicht invertierbar. Beispiel: Zeichensumme bei String.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Wozu dient eine HashMap?

A

Eine HashMap dient dem Speichern von Schlüssel-Werte Paaren (Hash-Table) und verwendet intern auch eine Hash-Funktion für möglichst schnelle Indizierung. Es gibt Methoden zum Hinzufügen (put), Auslesen (get), Ersetzen (replace), Entfernen (remove), für Abfragen bzgl. Größe und Inhalt (isEmpty, size) und zum Auslesen der Werte (Collection<V> values()).</V>

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Sind dynamische Datenstrukturen mit dem List-Interface java.util.List kompatibel?

A

Ja.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Was macht das Comparator Interface java.util.Comparator?

A

Es deklariert eine Methode int compare(Object a, Object b), mit welcher man zwei Objekte vergleichen kann. Die Methode compare gibt eine Zahl zurück (-1 falls a<b, 0 wenn a==b, 1 falls a>b). Das Interface Comparator kann bspw. von der statischen Methode Arrays.sort() verwendet werden.

17
Q

Wozu braucht man anonyme Klassen?

A

Manchmal braucht man Klassen nur an einer einzigen Stelle im Programm, sodass man gar keine vollständige Klasse implementieren will. Java erlaubt es in solchen Situationen, anonyme Klassen zu verwenden.

18
Q

Was sind anonyme Klassen?

A

Anonyme Klassen sind namenlose Unterklassen, die direkt bei ihrer Verwendung deklariert werden und wovon gleich ein Objekt erzeugt wird.
Beispiel:
animals.add(new Animal()) {…}
=>anonymous class for Monster - subclass of Animal

19
Q

Was sind besondere Eigenschaften von anonymen Klassen?

A
  • haben keinen Konstruktor
  • bei der Erzeugung eines Objekts einer anonymen Klasse ist es jedoch erlaubt, Parameter an den Konstruktor der Superklasse zu übergeben, falls dieser welche akzeptiert
  • sie überschreiben meist eine oder mehrere Methoden der Superklasse
  • dürfen neue Attribute und Methoden deklarieren, allerdings können “Benutzer” nur solche Elemente ansprechen, die auch in der Superklasse deklariert sind
  • anonyme Klassen können nicht nur von Klassen, sondern auch von Interfaces abgeleitet werden -> durch anonyme Klassen wird auch die Verwendung von Interfaces viel einfacher