树集顺序保持-Java

树集顺序保持-Java,java,priority-queue,treeset,Java,Priority Queue,Treeset,我有一个包含两个点的优先级队列 我一直在该队列上迭代,并将成对的每个点插入到树集中 问题是我想保持优先级队列中的顺序 我应该如何实现树集的比较器?这里有一种可能性。我并不是将点本身插入到树集,而是跟踪它们在优先级队列中的顺序的包装器。这样做的好处是我们不需要修改点类本身 下面是包装器类: import java.util.PriorityQueue; import java.util.TreeSet; public class Sortable<T> implements Comp

我有一个包含两个点的优先级队列 我一直在该队列上迭代,并将成对的每个点插入到树集中

问题是我想保持优先级队列中的顺序
我应该如何实现树集的比较器?

这里有一种可能性。我并不是将点本身插入到
树集
,而是跟踪它们在
优先级队列
中的顺序的包装器。这样做的好处是我们不需要修改
类本身

下面是包装器类:

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;
    }

}
import java.util.PriorityQueue;
导入java.util.TreeSet;
公共类可排序实现{
T元素;
整数阶;
公共可排序(T元素,整数顺序){
this.element=元素;
这个。顺序=顺序;
}
@凌驾
公共整数比较(可排序o){
退货订单-订单;
}
}
现在您可以执行以下操作:

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();
    }
}
公共无效传输(优先队列从,树集到){
点对pp=from.poll();
整数计数=0;
while(pp!=null){
添加(新的排序表(pp.getLeftPoint(),count));
计数++;
to.add(新的可排序(pp.getRightPoint(),count));
计数++;
pp=from.poll();
}
}

优先级队列产生其顺序的方式相同,即相同的比较器?我不能这样做,因为优先级队列包含一对表示线的点,而我的比较器使用该点。我不能为一个点编写比较器。如果一个点有多个优先级,即是多对的一部分,该怎么办?它必须是
TreeSet
还是
LinkedHashset
更有用?请解释一下,我不想改变我的类…你能让每一点都包含对这对的引用吗?在这种情况下,您可以编写一个使用旧比较器的新比较器。相反,如果你不知道这一点来自哪一对,我看不出你怎么能按照这两对的顺序排列。如果你坚持你问题的措辞,
树集
应该包含
并有一个
比较器
:您的
比较器
可以有自己的数据结构来跟踪点的顺序,比如
哈希映射
,其中整数的作用与我的代码中的
int order
相同。我认为这太复杂了,但我看不到多少收获。由你决定。