Após criar um Comparator estou obtendo resultados diferentes quando crio uma Lista e faço um .sort() após ter populado a mesma, e quando crio um Set com o mesmo comparador. Alguém pode me explicar o por que? (o resultado desejado é o obtido com a lista).
import java.util.Comparator;
public class ComparadorDistancia implements Comparator<Balao>{
public int[] origem = new int[2];
public ComparadorDistancia(int[] origem){
this.origem = origem;
}
@Override
public int compare(Balao o1, Balao o2) {
int x = this.origem[0];
int y = this.origem[1];
double distancia1 = Math.hypot(o1.pos[0] - x, o1.pos[1] - y);
double distancia2 = Math.hypot(o2.pos[0] - x, o2.pos[1] - y);
if(distancia1 < distancia2) return -1;
if(distancia1 > distancia2) return 1;
return 0;
}
}
import java.util.*;
public class Balao extends Comutador{
// public List<Balao> Vizinhos = new LinkedList<>();
public Set<Balao> Vizinhos = new TreeSet<>(new ComparadorDistancia(this.pos));
public Balao(int posX, int posY) {
super(posX, posY);
Balaos.stream()
.filter(b -> Math.hypot(b.pos[0] - this.pos[0], b.pos[1] - this.pos[1]) < 200)
.forEach(z ->{
z.Vizinhos.add(this);
this.Vizinhos.add(z);
});
Balaos.add(this);
}
@Override
public String toString() {
return "("+this.pos[0]+","+this.pos[1]+")";
}
}
import java.util.LinkedList;
import java.util.List;
public abstract class Comutador{
public int[] pos = new int[2];
public static List<Balao> Balaos = new LinkedList<>();
public Comutador(int x,int y){
this.pos[0]=x;
this.pos[1]=y;
}
}