Data structures 队列如何在接受/输出上提供O(1)性能?
我假设take/put的恒定时间性能是通过允许消费者和生产者访问队列的尾部/头部而不相互锁定来实现的。内存队列如何实现这一点?对于持久队列,答案是否会改变(可能)?在限制生产者和消费者每人1英镑的制度中,这一问题是如何解决的?系统何时允许并发访问呢?Data structures 队列如何在接受/输出上提供O(1)性能?,data-structures,queue,time-complexity,Data Structures,Queue,Time Complexity,我假设take/put的恒定时间性能是通过允许消费者和生产者访问队列的尾部/头部而不相互锁定来实现的。内存队列如何实现这一点?对于持久队列,答案是否会改变(可能)?在限制生产者和消费者每人1英镑的制度中,这一问题是如何解决的?系统何时允许并发访问呢?队列使用双链表作为其数据结构。事实上,Java中的队列声明如下: Queue<SomeClass> q = new LinkedList<>(); Queue q=newlinkedlist(); Java中的Linked
队列使用双链表作为其数据结构。事实上,Java中的队列声明如下:
Queue<SomeClass> q = new LinkedList<>();
Queue q=newlinkedlist();
Java中的LinkedList
默认为双链接列表
现在offer()
或头部插入总是O(1)
,因为您不需要遍历整个列表,也不需要使用poll()
删除尾部并返回它
现在,就并发访问而言,它不应该对代码的时间复杂性产生任何影响 这取决于队列使用的数据结构。例如,双链表的答案与圆形数组的答案非常不同。此外,如果您特别询问并发/线程安全队列,那么在问题中澄清这一点会有所帮助。根据您的建议更新问题这并不完全正确-在Java中,队列是一个接口,而不是数据结构,LinkedList
不是实现该接口的唯一数据结构ArrayDeque
是另一种非常常见的方法。