Exkurs - Sammlungsklassen
Objektsammlungen in Java
Neben der kennengelernten LinkedList
gibt es in Java
noch andere Klassen, die wir nutzen können, um Objektsammlungen zu verwalten.
Die Benutzung der Klassen ähnelt dabei der Benutzung der Klasse LinkedList
.
Wir werden hier ein paar dieser Klassen kennenlernen.
HashMap
Eine HashMap
ist geeignet, um Objekte zu "mappen", also
einander in einer Schlüssel → Wert-Beziehung zuzuordnen.
Man kann sich eine Map vorstellen wie eine Liste, bei der man nicht
über den Index, sondern über ein Objekt auf andere Objekte zugreift.
Handelt es sich bei Schlüssel und Wert um Zeichenketten, lässt sich
eine Map einer Liste folgendermaßen gegenüberstellen:
Index | Wert |
---|---|
0 | "Mit Tieren kenne ich mich nicht aus." |
1 | "Das Problem ist uns bekannt. Wir arbeiten daran." |
2 | "Haben Sie die aktuelle Version installiert?" |
Schlüssel | Wert |
---|---|
"Hund" | "Mit Tieren kenne ich mich nicht aus." |
"Windows" | "Das Problem ist uns bekannt. Wir arbeiten daran." |
"Update" | "Haben Sie die aktuelle Version installiert?" |
Der folgende Java-Dialog demonstriert die grundlegende Benutzung einer Map:
import java.util.HashMap;
HashMap<String, String> antworten = new HashMap<>();
antworten.put("Windows", "Das Problem ist uns bekannt. Wir arbeiten daran.");
System.out.println(antworten.get("Windows"));
Aufgabe 1 - Benutzung der HashMap
Finde und überfliege die Klassendokumention zur HashMap
.
Schreibe ein kleines Testprogramm, das die Benutzung einer HashMap
und deren Methoden demonstriert.
Aufgabe 2 - Chatbot
Schreibe ein Programm, mit dem man sich unterhalten kann. Die Grundidee lautet: Wenn der Benutzer einen Satz eingibt, werden alle Wörter des Satzes überprüft. Entspricht ein Wort daraus einem gespeicherten Schlüsselwort, dann wird eine entsprechende Antwort ausgegeben. Ansonsten wird eine zufällige Standardantwort ausgegeben. Der Benutzer kann das Programm durch Eingabe eines festgelegten Wortes beenden. Eine beispielhafte Umsetzung kannst Du hier sehen:
HashSet
Ein Menge im mathematischen Sinn kann beliebige Elemente enthalten.
Die Elemente können nicht doppelt vorkommen und es existiert keine Sortierung.
Solch eine Menge lässt sich in Java mit einer HashSet
umsetzen.
Aufgabe 3 - Benutzung der HashSet
Finde und überfliege die Klassendokumention zur HashSet
.
Schreibe ein kleines Testprogramm, das die Benutzung einer HashSet
und deren Methoden demonstriert.
Aufgabe 4 - Ich packe meine Tasche
Das Spiel Ich packe meine Tasche hat Ähnlichkeiten mit dem Spiel Ich packe meinen Koffer, besitzt aber doch etwas andere Regeln:
- Ein Spieler packt eine beliebige Sache in eine (virtuelle) Tasche.
- Der Gegenspieler muss den Gegenstand nennen und damit aus der Tasche auspacken.
- Dann werden die Rollen getauscht, aber die Tasche mit zwei Dingen gefüllt.
- Dies wird mit immer größerer Tasche solange wiederholt, bis einer der Spieler einen Fehler macht.
Ein Spielverlauf kann z.B. so aussehen:
Implementiere das Spiel mit Hilfe einer HashSet
.
Tipp: Mit System.out.print("\f");
kannst Du die Konsole löschen.
Wenn Du möchtest, kannst Du das Spiel erweitern, so dass z.B. mehrere Runden gespielt werden und der Spieler mit den meisten gemerkten Dingen insgesamt gewonnen hat.
ArrayList
Eine ArrayList
ist eine Liste, die nicht wie die LinkedList
intern mit verketteten Elementen arbeitet, sondern mit einem Array.
Aufgabe 5 - ArrayList vs. LinkedList
Vergleiche die prinzipiellen Möglichkeiten, die eine ArrayList bietet, mit denen einer LinkedList.
Stelle begründet Vermutungen auf, wann eine ArrayList
schneller ist, und wann
ein LinkedList
. Belege diese Vermutungen mit Hilfe von Tests.