Java:如何使用PriorityQueue?

问题:

如何获得PriorityQueue排序我想要排序的?
此外,offeradd方法之间有区别吗?

回答:

使用构造函数重载,它采用Comparator<? super E> comparator并传入比较器,以适当的方式对您的排序顺序进行比较。如果您提供了如何排序的示例,如果您不确定,我们可以提供一些示例代码来实现比较器。 (这很简单)
如其他地方所说:offeradd只是不同的接口方法实现。在JDK源代码中,add调用offer。虽然addoffer一般具有potentially不同的行为,因为offer表示由于大小限制而不能添加该值的能力,但这种差异在PriorityQueue中是无关紧要的,它是无界的。
这是一个按字符串长度排序的优先级队列的示例:

// Test.java
import java.util.Comparator;
import java.util.PriorityQueue;

public class Test
{
    public static void main(String[] args)
    {
        Comparator<String> comparator = new StringLengthComparator();
        PriorityQueue<String> queue = 
            new PriorityQueue<String>(10, comparator);
        queue.add("short");
        queue.add("very long indeed");
        queue.add("medium");
        while (queue.size() != 0)
        {
            System.out.println(queue.remove());
        }
    }
}

// StringLengthComparator.java
import java.util.Comparator;

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
        // You could also just return x.length() - y.length(),
        // which would be more efficient.
        if (x.length() < y.length())
        {
            return -1;
        }
        if (x.length() > y.length())
        {
            return 1;
        }
        return 0;
    }
}

这是输出:



确实很长

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Java: How do I use a PriorityQueue?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

45 − 39 =