Data structures 队列如何在接受/输出上提供O(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

我假设take/put的恒定时间性能是通过允许消费者和生产者访问队列的尾部/头部而不相互锁定来实现的。内存队列如何实现这一点?对于持久队列,答案是否会改变(可能)?在限制生产者和消费者每人1英镑的制度中,这一问题是如何解决的?系统何时允许并发访问呢?

队列使用双链表作为其数据结构。事实上,Java中的队列声明如下:

Queue<SomeClass> q = new LinkedList<>();
Queue q=newlinkedlist();
Java中的
LinkedList
默认为双链接列表

现在
offer()
或头部插入总是
O(1)
,因为您不需要遍历整个列表,也不需要使用
poll()
删除尾部并返回它


现在,就并发访问而言,它不应该对代码的时间复杂性产生任何影响

这取决于队列使用的数据结构。例如,双链表的答案与圆形数组的答案非常不同。此外,如果您特别询问并发/线程安全队列,那么在问题中澄清这一点会有所帮助。根据您的建议更新问题这并不完全正确-在Java中,队列是一个接口,而不是数据结构,
LinkedList
不是实现该接口的唯一数据结构
ArrayDeque
是另一种非常常见的方法。