【发布时间】:2021-06-02 13:17:15
【问题描述】:
参考书Java: The Complete Reference,“Queue”接口扩展“Collection”接口。此外,“PriorityQueue”扩展了“AbstractQueue”类,实现了“Queue”接口。
此外,根据 Internet 上的许多文章,Heaps 提供了最有效的优先级队列实现,同时考虑了 O(logn) 中的插入和删除。作为完全二叉树,堆可以简单地在数组/列表上实现。
我的问题是,如果堆对优先队列有效,那么为什么PriorityQueue 使用Queue 接口?为什么不使用List 接口?否则,实现的基本概念/想法是什么,提供与堆相同(或更好)的时间复杂度?
【问题讨论】:
-
因为它实现了一个队列,它是你添加到末尾并从开头获取的东西,而不是一个列表,它是你在中间迭代、添加和删除的东西,等等。接口没有理由需要反映底层实现。
-
您应该尝试了解实现接口和内部使用数据结构之间的区别。
标签: java collections queue heap priority-queue