树集顺序保持-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
相同。我认为这太复杂了,但我看不到多少收获。由你决定。