Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有界优先级队列继承与组合_Java_Oop - Fatal编程技术网

Java 有界优先级队列继承与组合

Java 有界优先级队列继承与组合,java,oop,Java,Oop,我想写一个有界优先级队列类。这本质上是一个优先级队列,但对队列中可能存在的元素数量有一个限制。因此,如果我插入一个新元素,并且队列已满,那么我将看到该元素是否大于队列的顶部。如果是,则丢弃新元素。如果否,那么我将删除top元素并插入这个新元素(队列将自动重新组织)。我目前已经实现了BoundedPriorityQueue,它是从具有“maxCount”成员的PriorityQueue派生而来的,并且我已经覆盖了add方法并添加了我上面描述的功能。我在想我是不是应该考虑写作方式,而不是继承方式。不

我想写一个有界优先级队列类。这本质上是一个优先级队列,但对队列中可能存在的元素数量有一个限制。因此,如果我插入一个新元素,并且队列已满,那么我将看到该元素是否大于队列的顶部。如果是,则丢弃新元素。如果否,那么我将删除top元素并插入这个新元素(队列将自动重新组织)。我目前已经实现了BoundedPriorityQueue,它是从具有“maxCount”成员的PriorityQueue派生而来的,并且我已经覆盖了add方法并添加了我上面描述的功能。我在想我是不是应该考虑写作方式,而不是继承方式。不过,我目前的做法似乎很简单

如果我要进行组合,那么我必须从AbstractQueue类派生,实现这些方法,然后用它组合优先级队列

谢谢


Venk

在所描述的情况下,我会选择继承——这是一个典型的例子。您可以(当我无法在多个实现之间做出决定时,我会这样做)创建两个解决方案,尝试它们,看看它们在API方面、性能方面、实现方面和理解方面是如何的,然后根据它们做出决定。

在我看来,最好使用组合。因为,这种继承方式违反了。派生类型不应替换基类型的功能。
此链接将非常有用:

您是否有不喜欢当前解决方案的原因?是否过于复杂?很难理解吗?它是太慢还是容易受到比赛条件的影响?好吧,没有。但在高效Java中,Joshua遇到了一个稍有不同但相关的问题,但通过组合解决了它。我试图探究它背后的原因。如果你使用继承,你必须问问自己是否可以用BoundedPriorityQueue替换优先级队列,而不会遇到任何问题。如果是,则使用继承,否则使用组合。如果有疑问,使用构图。