Ваш метод compareTo
является источником проблемы:
public int compareTo(Object o) {
if((o == null) || this.distanza > ((Edificio)o).distanza)
return 1;
/*else if(this.distanza == ((Edificio)o).distanza)
return 0;*/
else
return -1;
}
Поскольку он никогда не возвращает 0, элемент, который вы пытаетесь удалить из TreeSet
, не найден.
Я не уверен, почему вы закомментировали часть, которая возвращает 0, но вы должны раскомментировать ее:
public int compareTo(Object o) {
if((o == null) || this.distanza > ((Edificio)o).distanza)
return 1;
else if(this.distanza == ((Edificio)o).distanza)
return 0;
else
return -1;
}
PS Было бы лучше не использовать raw Comparable
.Измените свой класс на:
public class Edificio implements Comparable<Edificio>
{
...
@Override
public int compareTo(Edificio o) {
if((o == null) || this.distanza > o.distanza)
return 1;
else if(this.distanza == o.distanza)
return 0;
else
return -1;
}
...
}
РЕДАКТИРОВАТЬ: Еще одна проблема с вашим кодом, которая была скрыта из-за ошибки remove()
удалить элемент, заключается в том, что вы вызываете alberobello.remove(edificio)
во время итерации по Set
.Скорее всего, вы получите ConcurrentModificationException
, как только вы исправите свой метод compareTo
.Вы должны просто использовать метод Iterator
remove()
:
if(edificio.getPinodeipalazzi().equals(p) && edificio.getAnno() == y){
iterator.remove();
dimension --;
System.out.println("Removed: " + edificio.getPinodeipalazzi()+ " " + edificio.getAnno() + " " +alberobello.size() );
}