Übungen (Collections)
Übungen (Collections)Fragen
Was sind günstige, bzw. ungünstige Anwendungsszenarien für die folgenden Klassen des Java Collection Frameworks?
- LinkedList
- ArrayList
- TreeSet
- HashSet
Klasse Student
Die Übungen dieser Seite verwenden die Klasse Student. Studenten haben eine Matrikelnummer, einen Vornamen, einen Nachnamen und eine aktuelles Semester. Für die Klasse wurden alle Methoden zum Vergleichen überladen. Zwei Studenten sind identisch wenn sie die gleiche Matrikelnummer besitzen.
package s2.collection; public class Student implements Comparable { int matrikelnr; String name; String vorname; int semester; public Student(String n, String vn, int nr, int sem) { name = n; vorname = vn; matrikelnr = nr; semester = sem; } public String toString() { return "(" + matrikelnr + "," + name + " " + vorname + ", " + semester + ")"; } /** * Studenten werden anhand Ihre Matrikelnr verglichen * @param o * @return */ public int compareTo(Object o) { int diff = 0; if (o.getClass() == getClass()) { diff = matrikelnr - ((Student) o).matrikelnr; } if (diff > 0) { diff = 1; } if (diff < 0) { diff = -1; } return diff; } public boolean equals(Object o) { return (compareTo(o) == 0); } public int hashCode() { return matrikelnr; } }
Mengen von Studenten
Das Programm soll eine Menge von Studenten verwalten. Vervollständigen Sie das das folgende Programm:
- main() Methode
- Setzen Sie die Objekterzeugung für die Variablen mengeUnsortiert und mengeSortiert ein
- Fügen Sie alle Studenten in beide Mengen ein indem Sie die Platzhalter-Konsolenausgaben ersetzen
- ausgaben() Methode: Iterator über eine Menge implementieren
- Deklarieren und initialisieren Sie ein Iteratorobjekt für das Listenobjekt welches als Parameter übergeben wurde
- Implementieren Sie korrekte Abbruchbedingung für die while-Schleife
- Implementieren die while-Schleife. Weisen Sie der Variablen s einen jeweils neuen Student der Menge zu
Beobachtungen:
- Welche der beiden Mengen ist sortiert?
- Welche Mengenimplementierungen nutzen Sie für welche Aufgabenstellung?
- Was geschieht mit Caroline Herschel?
package s2.collection; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import java.util.TreeSet; public class SetIterDemo { public static void main(String[] args) { Set<Student> mengeUnsortiert = null; // Hier HashSetobjekt einfügen Set<Student> mengeSortiert = null; // Hier TreeSetobjekt einfügen Student s; s = new Student("Curie", "Marie", 19, 1); System.out.println("Hier Student " + s + "in beide Mengen einfügen"); s = new Student("Merian", "Maria-Sybilla", 17, 3); System.out.println("Hier Student " + s + "in beide Mengen einfügen"); s = new Student("Noether", "Emmi", 16, 1); System.out.println("Hier Student " + s + "in beide Mengen einfügen"); s = new Student("Liese", "Meitner", 15, 2); System.out.println("Hier Student " + s + "in beide Mengen einfügen"); s = new Student("Herschel", "Caroline", 15, 2); System.out.println("Hier Student " + s + "in beide Mengen einfügen"); ausgaben(mengeUnsortiert); ausgaben(mengeSortiert); } public static void ausgaben(Set<Student> menge) { Student s; System.out.println("Hier Iterator deklarieren"); System.out.println("Inhalt der Menge (" + menge.getClass() + "):"); // Nicht ersetzen while (true) { // Abbruchbedingung ersetzen. Die Schleife terminiert so nicht! System.out.println("Hier Student aus Iterator in Schleife auslesen"); s = null; System.out.println("Student: " + s); // Nicht ersetzen } } } // Ende der Klasse
Maps von Studenten
Das folgende Programm soll Studenten mit Hilfe zweier Maps verwalten. Studenten sollen nach Matrikelnummer und nach Nachnamen verwaltet werden. Vervollständigen Sie das das folgende Programm:
- main() Methode
- Setzen die die Objekterzeugung für die Variablen matrikelMap und nachName ein (In den beiden Kommentarzeilen)
- matrikelMap soll als Schlüssel die Matrikelnummer des Studenten verwenden, der Inhalt soll aus Studenten bestehen
- nachnameMap soll als Schlüssel den Nachnamen des Studenten verwenden, der Inhalt soll aus Studenten bestehen
- Welche Typen müssen für die Platzhalter xxx? bei der Variablen und dem Map-Parameter eingesetzt werden?
- Fügen Sie alle Studenten in beide Mengen ein indem Sie die Platzhalter-Konsolenausgaben ersetzen
- Setzen die die Objekterzeugung für die Variablen matrikelMap und nachName ein (In den beiden Kommentarzeilen)
- ausgabenMatrikelnr() Methode:
- Iterieren Sie über die Matrikelnummern. Die Matrikelnummern sind die Schlüssel der Map mp
- Legen Sie einen Iterator an;
- Definieren Sie die Abbruchbedingung für die while Schleife
- Lesen Sie die nächste Matrikelnummer in der while Schleife aus (Variable s)
- Finden Sie die Studenten zur Matrikelnummern 15 und 16.
- Iterieren Sie über die Studenten. Die Studenten sind die eigentlichen Objekte der Map mp
- Legen Sie einen Iterator an;
- Definieren Sie die Abbruchbedingung für die while Schleife
- Lesen Sie die nächste Matrikelnummer in der while Schleife aus (Variable st)
- Iterieren Sie über die Matrikelnummern. Die Matrikelnummern sind die Schlüssel der Map mp
- ausgabenNamen() Methode:
- Iterieren Sie über die Nachnamen. Die Nachnamen sind die Schlüssel der Map mp
- Legen Sie einen Iterator an;
- Definieren Sie die Abbruchbedingung für die while Schleife
- Lesen Sie den nächsten Nachnamen in der while Schleife aus (Variable str)
- Finden Sie die Studenten mit den Namen Herschel und Merian.
- Iterieren Sie über die Studenten. Die Studenten sind die eigentlichen Objekte der Map mp
- Legen Sie einen Iterator an;
- Definieren Sie die Abbruchbedingung für die while Schleife
- Lesen Sie die nächste Matrikelnummer in der while Schleife aus (Variable st)
- Iterieren Sie über die Nachnamen. Die Nachnamen sind die Schlüssel der Map mp
Beobachtungen:
- Welche der beiden Maps ist sortiert?
- Sind die Schlüssel sortiert?
package s2.collection; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.TreeMap; public class MapIterDemo { public static void main(String[] args) { Map<xxx?,Student> matrikelMap = new TreeMap<xxx?,Student>(); // Ersetzen Sie xxx? Map<xxx?, Student> nachnameMap = new HashMap<xxx?,Student>();// Ersetzen Sie xxx? Student s; s = new Student("Curie", "Marie", 19, 1); System.out.println("Einsetzen: Studenten "+ s + " in die beiden Maps eintragen. Schlüssel beachten!"); s = new Student("Merian", "Maria-Sybilla", 17, 3); System.out.println("Einsetzen: Studenten "+ s + " in die beiden Maps eintragen. Schlüssel beachten!"); s = new Student("Noether", "Emmi", 16, 1); System.out.println("Einsetzen: Studenten "+ s + " in die beiden Maps eintragen. Schlüssel beachten!"); s = new Student("Meitner", "Liese", 15, 2); System.out.println("Einsetzen: Studenten "+ s + " in die beiden Maps eintragen. Schlüssel beachten!"); s = new Student("Herschel", "Caroline", 20, 2); System.out.println("Einsetzen: Studenten "+ s + " in die beiden Maps eintragen. Schlüssel beachten!"); ausgabenMatrikelnr(matrikelMap); ausgabenNamen(nachnameMap); } public static void ausgabenMatrikelnr(Map<Integer,Student> mp) { int s; Student st; System.out.println("Einsetzen: Vorbereitungen zum Auslesen der Matrikelnr"); Iterator<Integer> iterMatrikel = null; // Einsetzen: Zuweisen des Iterators System.out.println("Name (" + mp.getClass() + "):"); while (null) { // Einsetzen: Iteratorbedingung einfügen s = null // Einsetzen: Auslesen des Iterators System.out.println("Matrikelnummer: " + s); } int mnr = 15; System.out.println("Student mit Matrikelnummer " + mnr + " ist:" + null); // Einsetzen: Student mit Matrikelnr mnr mnr = 16; System.out.println("Student mit Matrikelnummer " + mnr + " ist:" + null ); // Einsetzen: Student mit Matrikelnr mnr System.out.println("Alle Werte der MatrikelMap:"); Collection<Student> l = null; // Einsetzen: Collection mit den Studenten Iterator<Student> iterStudi = l.iterator(); System.out.println("Name (" + mp.getClass() + "):"); while (null) { // Einsetzen: Schleifenbedingung des Iterators // Einsetzen: Auslesen des nächsten Studenten System.out.println("Student: " + st); } } public static void ausgabenNamen(Map<String,Student> mp) { String str; Student st; System.out.println("Einsetzen: Vorbereitungen zum Auslesen der Nachnamen"); System.out.println("Namen (" + mp.getClass() + "):"); while (null) { // Einsetzen: Iteratorbedingung einfügen str = null// Einsetzen: Auslesen des Iterators System.out.println("Nachname: " + str); } String nme = "Merian"; System.out.println("Student mit Name " + nme + " ist:" + null); // Einsetzen der Operation zum Auslesen der Studentin mit Namen nme nme = "Herschel"; System.out.println("Student mit Name " + nme + " ist:" + + null); // Einsetzen der Operation zum Auslesen der Studentin mit Namen nme System.out.println("Alle Werte der NamenMap:"); Collection<Student> l = null; // Einsetzen: Auslesen der gesamten Collection Iterator<Student> iterStudi = l.iterator(); System.out.println("Name (" + mp.getClass() + "):"); while (null) { // Einsetzen: Iteratorbedingung einfügen st = null// Einsetzen: Auslesen des Iterators System.out.println("Student: " + st); } } }
- 10427 views