Hallo,
ich verstehe nicht warum folgender Code nicht funktioniert:
Ich benutze ein Set um Duplikate zu verhindern. Für mich sind (1,2) und (2,1) auch Duplikate. Aber zum Schluss befinden sich trotzdem mehr Elemente drin als gewollt. Andere Set-Klassen funktionieren auch nicht.
Und nicht sagen, man kann das mit zwei geschachtelten for-Schleifen lösen. Habe ein einfaches Beispiel genommen als Abstraktion.[/code]
ich verstehe nicht warum folgender Code nicht funktioniert:
Code:
public class Pair implements Comparable<Pair> {
int x;
int y;
public Pair(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public boolean equals(Object o) {
if(o instanceof Pair) {
Pair p = (Pair)o;
if(this.x == p.x && this.y == p.y) return true;
if(this.x == p.y && this.y == p.x) return true;
}
return false;
}
public int compareTo(Pair p) {
if(this.x == p.x && this.y == p.y) return 0;
if(this.x == p.y && this.y == p.x) return 0;
if(this.x - p.x == 0) return this.y - p.y;
return this.x - p.x;
}
public static void main(String[] args) {
int[] test = new int[]{1, 2, 3, 4};
SortedSet<Pair> set = new TreeSet<Pair>();
for(int x : test) {
for(int y : test) {
if(x != y) set.add(new Pair(x, y));
}
}
for(Pair p : set) {
System.out.println(p.getX() + " " + p.getY());
}
System.out.println(set.size());
}
}
Ich benutze ein Set um Duplikate zu verhindern. Für mich sind (1,2) und (2,1) auch Duplikate. Aber zum Schluss befinden sich trotzdem mehr Elemente drin als gewollt. Andere Set-Klassen funktionieren auch nicht.
Und nicht sagen, man kann das mit zwei geschachtelten for-Schleifen lösen. Habe ein einfaches Beispiel genommen als Abstraktion.[/code]