在我的C学习日期间,当我实施了Queue
时,我在LinkedList
之上实现了它们。所以基本上我在Queue
之上有LinkedList
个操作的两个指针(前面和后面),或者在CircularLinkedList
顶部有一个更好的前指针。
我正在学习Java Collections Framework
,我发现设计完全脱离了List
和Queue
接口,并且实现以下列方式分支 -
我认为AbstractQueue
应该已经在AbstractList
内的某个地方进行了子类化。也许不在ArrayList
内,因为我不想随意访问元素,但可能在AbstractSequentialList
内,嗯? (我知道,我在这里可能完全错了)
答案 0 :(得分:2)
我认为接口应该是不相交的,但是你已经确定了实现方法中的链接。列表和队列在概念上与被视为黑盒子的消费者不同,即使在如何使用链接列表实现它们之间存在链接。
答案 1 :(得分:2)
这听起来像是为了实现灵活性而做的事情:队列不必作为列表实现(特别是优先级队列几乎肯定是下面的堆,这是一个比列表更随机的访问结构可以提供)。
答案 2 :(得分:1)
Liskov Substitution Principle不是在这里发挥作用吗? AbstractQueue 不是一个AbstractList,所以它不应该从它继承。但是,它的实现可能会使用一个,但是通过组合而不是继承。