Вот возможность. Я не вставляю сами точки в TreeSet
, но обертка, которая отслеживает порядок, в котором они находились, в PriorityQueue
. Это имеет то преимущество, что нам не нужно изменять класс Point
.
Вот класс-оболочка:
import java.util.PriorityQueue;
import java.util.TreeSet;
public class Sortable<T> implements Comparable<Sortable<T>> {
T element;
int order;
public Sortable(T element, int order) {
this.element = element;
this.order = order;
}
@Override
public int compareTo(Sortable<T> o) {
return order - o.order;
}
}
Теперь вы можете сделать:
public void transfer(PriorityQueue<PointPair> from, TreeSet<Sortable<Point>> to) {
PointPair pp = from.poll();
int count = 0;
while (pp != null) {
to.add(new Sortable<Point>(pp.getLeftPoint(), count));
count++;
to.add(new Sortable<Point>(pp.getRightPoint(), count));
count++;
pp = from.poll();
}
}
же образом приоритетная очередь производит это порядок, то есть один и тот же компаратор? – Thomas
Я не могу этого сделать, поскольку очередь priorty содержит пару точек, которые представляют строки, и мой компаратор использует это. Я не могу написать компаратор для одной точки. – 2D3D
Что делать, если точка имеет несколько приоритетов, т. Е. Является частью нескольких пар? И нужно ли это «TreeSet» или не использовать «LinkedHashset»? – Thomas