java中如何求比较器的逆
在一个方法中,我收到一个泛型java中如何求比较器的逆,java,generics,heap,priority-queue,comparator,Java,Generics,Heap,Priority Queue,Comparator,在一个方法中,我收到一个泛型对象作为参数。现在我想创建两个优先级队列。一个使用E使用的比较器,另一个使用E使用的比较器的相反队列(即,如果E使用“=”)。 请告诉我如何创建两个这样的队列 queue2=new PriorityQueue<E>(0,Collections.reverseOrder(e)); queue2=newpriorityqueue(0,Collections.reverseOrder(e)); 我得到的错误是reverseOrder不适用 请帮助查看。您的对
对象作为参数。现在我想创建两个优先级队列。一个使用E使用的比较器
,另一个使用E使用的比较器
的相反队列(即,如果E使用“=”)。
请告诉我如何创建两个这样的队列
queue2=new PriorityQueue<E>(0,Collections.reverseOrder(e));
queue2=newpriorityqueue(0,Collections.reverseOrder(e));
我得到的错误是reverseOrder
不适用
请帮助查看。您的对象E
扩展了java.lang.Comparable,
,但它不是java.util.Comparator
创建没有比较器的第一个队列,您将在compareTo
函数中获得排序,然后创建一个java.util.Comparator
,它以相反的方式进行比较(只需调用a.compareTo(b),然后对结果求反),并使用该比较器创建第二个队列。下面的程序描述了如何执行此操作
我有StringLengthComparator
,它根据字符串长度进行比较。使用Collections.reverseOrder,我创建了一个逆序队列和另一个顺序正确的队列
import java.util.Collections;
import java.util.Comparator;
import java.util.PriorityQueue;
public class TestReverseorder {
public static void main(String[] args) {
Comparator<String> comparator = new TestReverseorder().new StringLengthComparator();
PriorityQueue<String> reverse = new PriorityQueue<String>(10,
Collections.reverseOrder(comparator));
PriorityQueue<String> queue = new PriorityQueue<String>(10,comparator);
queue.add("1");
queue.add("12");
queue.add("123");
reverse.add("1");
reverse.add("12");
reverse.add("123");
while (!queue.isEmpty()) {
System.out.println(queue.poll());
}
while (!reverse.isEmpty()) {
System.out.println(reverse.poll());
}
}
public class StringLengthComparator implements Comparator<String> {
@Override
public int compare(String x, String y) {
// Assume neither string is null. Real code should
// probably be more robust
if (x.length() < y.length()) {
return -1;
}
if (x.length() > y.length()) {
return 1;
}
return 0;
}
}
}
的单个参数是比较器,而不是集合。对于您的代码,只需使用reverseOrder而无需参数。您还必须使用非零初始大小。下面的代码将起作用
queue2=new PriorityQueue<E>(1, Collections.reverseOrder());
queue2=newpriorityqueue(1,Collections.reverseOrder());
queue2=newpriorityqueue(0,Collections.reverseOrder(e));我得到的错误是reverseorder不适用。请帮助我,我从来都不知道那里有集合。reverseOrder
。谢谢
queue2=new PriorityQueue<E>(1, Collections.reverseOrder());