为什么AbstractQueue和AbstractList脱节?

时间:2010-05-20 12:45:36

标签: java design-patterns collections

在我的C学习日期间,当我实施了Queue时,我在LinkedList之上实现了它们。所以基本上我在Queue之上有LinkedList个操作的两个指针(前面和后面),或者在CircularLinkedList顶部有一个更好的前指针。

我正在学习Java Collections Framework,我发现设计完全脱离了ListQueue接口,并且实现以下列方式分支 -

alt text

我认为AbstractQueue应该已经在AbstractList内的某个地方进行了子类化。也许不在ArrayList内,因为我不想随意访问元素,但可能在AbstractSequentialList内,嗯? (我知道,我在这里可能完全错了)

3 个答案:

答案 0 :(得分:2)

我认为接口应该是不相交的,但是你已经确定了实现方法中的链接。列表和队列在概念上与被视为黑盒子的消费者不同,即使在如何使用链接列表实现它们之间存在链接。

答案 1 :(得分:2)

这听起来像是为了实现灵活性而做的事情:队列不必作为列表实现(特别是优先级队列几乎肯定是下面的堆,这是一个比列表更随机的访问结构可以提供)。

答案 2 :(得分:1)

Liskov Substitution Principle不是在这里发挥作用吗? AbstractQueue 不是一个AbstractList,所以它不应该从它继承。但是,它的实现可能会使用一个,但是通过组合而不是继承。