我正在实施一个通用优先级队列作为家庭作业项目的一部分。我想知道当PriorityQueue为空时要返回什么。我无法返回null。
处理此案件的最佳方法是什么?实施此类数据结构时,最佳设计选择是什么?
class PQueue<T> : IPQueue<T>
{
T[] items;
//..
public T RemoveMax()
{
if(heapSize < 1) //Heap Empty
return default(T);
T max = items[0];
//..
return max;
}
}
答案 0 :(得分:4)
我会在这里的框架类中寻找指导,即Queue<T>
- 如果您尝试从空队列中取出项目,则会抛出InvalidOperationException
。这只是有意义的,但是如果你让消费者访问队列中的项目数,或者至少如果队列是空的,那就是:
public bool IsEmpty()
{
return heapSize == 0;
}
public int Count
{
get
{
return heapSize;
}
}
答案 1 :(得分:0)
抛出异常。
QueueEmptyException(“优先级队列为空”)
类似的东西。
答案 2 :(得分:0)
抛出异常的替代方法是使用空对象模式(wiki)来返回&lt; T&gt;。 “什么都不做”。
这看似不必要的复杂化,但这有助于避免对队列访问进行try / catch操作。它还避免了使用异常处理有效行为的反模式,如果您的队列通常为空,这也可能导致性能问题,因为异常处理“缓慢”。