Wie Sie sagten, würde eine Pair-Klasse mit hashcode & equals implementiert und in einem HashSet platziert das erreichen, wonach Sie suchen. Mir ist keine JDK-Datenstruktur bekannt, die dies nativ macht.
Wenn Sie es etwas verallgemeinern möchten, könnten Sie ein Tuple erstellen, Tuple
und ein HashSet basierend auf diesem Tuple deklarieren, HashSet>
. Erstellen Sie dann eine allgemeinere Equals/Hashcode-Methode für die Tupeltypen.
Hier ist eine Beispielimplementierung:
final class Pair {
private final A _first;
private final B _second;
public Pair(A first, B second) {
_first = first;
_second = second;
}
@Override
public int hashCode() {
int hashFirst = _first != null ? _first.hashCode() : 0;
int hashSecond = _second != null ? _second.hashCode() : 0;
return (hashFirst + hashSecond) * hashSecond + hashFirst;
}
@Override
@SuppressWarnings("unchecked")
public boolean equals(Object other) {
if (other instanceof Pair) {
Pair otherPair = (Pair) other;
return this._first == otherPair._first //
|| (this._first != null //
&& otherPair._first != null && this._first.equals(otherPair._first)) //
&& this._second == otherPair._second //
|| (this._second != null //
&& otherPair._second != null && this._second.equals(otherPair._second));
}
return false;
}
@Override
public String toString() {
return "(" + _first + ", " + _second + ")";
}
public A getFirst() {
return _first;
}
public B getSecond() {
return _second;
}