Frage zu HashSets und Vergleiche

blubberblase

Mitglied
Hallo Leute,
ich hänge grade an einer Aufgabe und komme einfach nicht weiter. Vielleicht wisst ihr ja eine Lösung. Es geht um folgendes: Es gibt eine Person1, die weitere Personen kennt (Kommilitonen, Freunde und welche aus dem Sportverein). Einige Personen sind z.B. im Sportverein und gleichzeitig auch die Freunde der Person1.

Die Aufgabe dazu war, eine Klasse zu schreiben, die die verschiedenen Bekanntschaften der Person1 in geeigneten Collections verwaltet. Zudem soll es halt auch Methoden geben, die das Ausgeben ermöglich, z.B. "Zeige alle Freunde, die gleichzeitig auch im Sportverein sind".

Meine Lösung wäre, drei HashSets zu erstellen, wo ich einfach erstmal alle Personen der Kategorie "Freunde", "Studium" und "Sportverein" eintrage.

Mein Problem ist allerdings, dass ich nicht weiß, wie ich z.B. für die Ausgabe "Zeige alle Freunde, die gleichzeitig auch im Sportverein sind" die Methode aussehen muss. Wie kann ich die die Liste bzw. HashSet "Sportverein" mit dem HashSet "Freunde" vergleichen, damit er mir dann die Übereinstimmungen ausgibt?

Über Tipps wäre ich euch sehr dankbar! Grüße!
 

zeja

Erfahrenes Mitglied
Nun schau dir doch mal die Methoden an die es auf einem HashSet so gibt. Mit containsAll, retainAll, removeAll solltest du irgendwie weiterkommen wenn du sie geschickt einsetzt.
 

blubberblase

Mitglied
Danke für den Tipp! Ich habe eben noch was gefunden: Ich bilde einfach die Differenz aus zwei HashSets...so kann ich ja die Gemeinsamkeiten finden. Er soll mir alle Kommilitonen auflisten, die auch Freunde von Person1 sind. Habe das jetzt so gemacht:

Code:
listeFreunde.retainAll(listeStudi);
  Iterator it = listeFreunde.iterator();
  while(it.hasNext()){
	System.out.println(it.next());
  }

Nur leider zeigt er mit bei der Ausgabe gar nix mehr an :/
 
Zuletzt bearbeitet:

zeja

Erfahrenes Mitglied
Na wenns keine Gemeinsamkeiten gibt dann gibt er nichts mehr aus ;) Hast du denn equals und hashCode in deiner Personenklasse ordentlich überschrieben?
 

blubberblase

Mitglied
Gemeinsamkeiten soll es schon geben...in beiden Listen (Freunde und Studi) gibt es zwei Personen, die auftauchen sollten. Aber es kommt leider nix.

Meine Personenklasse sieht bis jetzt so aus:

Code:
public class Person {
	protected String name;
	
	public Person (String name) {
		this.name = name;
	}
	
	public String getName() {
		return name;
	}
	
	public String toString() {
		return "Name: " + name;
	}
}

In meiner Main - Klasse erzeuge ich mein HashSet und füge dann die Personen der Liste zu, z.B. damit:

Code:
listeStudi.add(new Person("Olga"));

Das mit dem equals und dem HashCode wusste ich bis jetzt noch gar nich, dass ich das bauche. Werde mir das mal eben anschauen, danke!
 

blubberblase

Mitglied
Sooo, habs gelöst. Habe es mit Vereinigung, Durchschnitt und Differenz gemacht :)

also listStudi.addAll(listFreunde) und retainAll usw usw. VIelen Dank für die schnelle Hilfe!