remove 函数如何处理包含字符串值的最小优先级队列?

How does remove function work with min priority queues that contain string values?

我知道如果我从最小优先级队列中删除一个元素,它会先删除最小的元素。比如我有一个最小优先级队列,里面有一堆int值,比如1, 2, 3,如果我调用remove函数,它会移除1.

如果我有一堆字符串值的最小优先级队列怎么办?例如,如果我有一个 "Tom", "Moe", "Brandon", "Alexander" 的优先级队列,它会根据字典排序只删除最小值吗?如果是这样,我想它会先删除 "Moe" 。然后,如果我再次调用 remove,它将删除 "Tom".

我的理解对吗?下面的伪代码详细说明了我正在查看的确切代码。

public interface Container<T>
{
 void insert(T x);  // insert x into Container
  T remove();       // remove item from Container
}

public class C<T> implements Container<T>
{
 public C() { /* constructor */ } 
 public void insert(T x) { /* insert x into C */ }
 public T remove() { /* remove item from C */ }
 //.. other methods
}

Here is a program segment that uses class C above:

Container<String> words = new C<String>();
String w1 = "Tom";
String w2 = "Dick";
String w3 = "Harry";
String w4 = "Moe";
words.insert(w1);
words.insert(w2);
words.insert(w3);
words.insert(w4);
String str = words.remove(); // remove
str = words.remove();        // remove again
System.out.println(str);

PriorityQueues通常接受Comparator in order to determine how to sort the values inside. If you don't provide one, then Java uses the default comparison method:比如1小于2,"A"小于"B"。

因此在您的示例中,默认的词典顺序为:Alexander、Brandon、Moe、Tom(如字母表)。另请注意 "a" 小于 "A",因此大小写也很重要。