assignments/Assignment_010/readme.md

2.9 KiB

Eine Menge Mengen, bloß nicht vermengen

🎓 Benotetes Assignment 🎓

📆 Fällig: 16.12.2025 📆

Die Platte ist komprimiert, Battlefield 6 installiert und Sie zocken vor lauter Glück über Ihr tolles Kompressionsprogramm mehrere Nächte durch. Das Studium leidet, aber im Gegenzug steigen Sie immer weiter in den Rängen des Spiels auf. Wer braucht schon einen Bachelor of Science, wenn man sich durch 100 Ranks leveln kann.

Plötzlich passiert es, Sie werden vom Sekundenschlaf erwischt und schlafen mit dem Kopf auf der Tastatur ein. Es war wohl doch zu viele die letzten Tage. Ihre Nase produziert wilde Zeichen im Discord-Chat und die anderen Spieler beschimpfen Sie auf Russisch. Aber Sie bekommen nichts mehr davon mit, so süß sind Ihre Träume.

In Ihrem Traum werden Sie ins Wunderland verschleppt und der verrückte Hutmacher will, dass Sie ein Programm für ihn schreiben. Er wäre nicht der verrückte Hutmacher, wenn dieses Programm nicht sehr spezifische Anforderungen hätte. Oder ist es vielleicht gar nicht der Hutmacher, der Sie da quält?

MySet

Gehen Sie in das Paket pr2.generics.set.

Sie sollen das Interface Set implementieren, das die Operationen auf einer Menge definiert. Das Interface Set ist aber noch nicht generisch, d.h. bevor Sie die Implementierung beginnen, müssen Sie das Interface zu einem Set<T> umbauen, sodass man typsicher damit umgehen kann.

Ausgehend vom angepassten Interface Set<T> implementieren Sie die Methoden in der Klasse MySet<T>.

Für die interne Speicherung der Daten verwenden Sie bitte die vorgegebene Klasse Bag, um sich die Arbeit zu erleichtern und nicht mit Arrays arbeiten zu müssen.

Bitte beachten Sie die folgenden Regeln für die Implementierung:

  • Achten Sie bei den Methoden von Set darauf, dass diese möglichst flexibel mit den Typen umgehen, d.h. verwenden Sie, wo immer möglich, Wildcards anstatt des Typparameters T. Denken Sie an die Verwendung von extends und super im Zusammenhang mit Wildcards ?.
  • Verwenden Sie keine Klassen aus dem Collection API, d.h. Sie dürfen nicht auf java.util.Set, java.util.List etc. zurückgreifen. Ihre darunterliegende Speicherung wird von Bag übernommen.
  • Implementieren Sie zuerst die beiden Methoden each und test.
  • Außerhalb der Methoden each und test darf es keine Schleifen (for, while) in Ihrer Klasse geben. Sie müssen alle Operationen, welche eine Iteration (Schleife) brauchen, auf diese beiden Methoden abbilden. Hierzu verwenden Sie bitte geschickt Lambdas, die Sie (wo sinnvoll) an die each- und test-Methode übergeben und darin dann die notwendigen Operationen durchführen.

UnitTests

Schreiben Sie JUnit-Tests in der Klasse pr2.generics.set.TestMySet, welche Ihre Implementierung ausgiebig testen. Hierbei sollten alle Methoden getestet werden, die das Interface vorgibt.