i

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:

Liste
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?"
Map
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.

Suche

v
7.1.4.2.5
dev.inf-schule.de/oop/java/experten/listen/sammlungsklassen
dev.inf-schule.de/7.1.4.2.5
dev.inf-schule.de/@/page/PKdHlvMrlUaGIDJX

Rückmeldung geben