网站建设及优化重要性,青岛通力建设集团网站,自己的电脑做网站服务器,浙江住房和城乡建设厅网站首页java 队列和堆栈我最近一直在研究一些需要堆栈和队列的Java代码。 使用的选择不是立即显而易见的。 有一个Queue接口#xff0c;但没有明确的具体实现要使用。 还有一个Stack类#xff0c;但是javadocs指出其他类“应该优先于此类使用”。 那么#xff0c;您对Java中的堆栈和… java 队列和堆栈 我最近一直在研究一些需要堆栈和队列的Java代码。 使用的选择不是立即显而易见的。 有一个Queue接口但没有明确的具体实现要使用。 还有一个Stack类但是javadocs指出其他类“应该优先于此类使用”。 那么您对Java中的堆栈和队列使用哪种实现 我发现我的经验法则是可以将ArrayDeque类同时用于Stack和Queues但下面提供了更多详细信息。 通用定义 首先让我们从一些定义开始。 在该词的常用用法中队列是FIFO先进先出。 就像在邮局排队的第一个人一样。 堆栈为LIFO后进先出。 想象一堆书–您放在书堆中的最后一本书是您摘下的第一本书。 Java中的选择 在Java中情况稍微复杂一些但原理相同。 有前面提到的Queue接口该接口具有添加删除和查看元素的预期方法。 实际上这些方法有两种形式一种在操作失败时引发异常另一种返回特殊值例如null或false请参见此处 。 还有一个名为Deque的Queue子接口它是“双头队列”的缩写通常发音为“ deck”。 该接口定义访问集合两端的元素的方法。 此功能使Deque成为队列和堆栈实现的有用基础。 但是Queue和Deque都是接口因此我们仍然没有找到要使用的具体实现… 候选清单ArrayDeque和LinkedList 2个主要选择是 ArrayDeque和LinkedList 。 Deque还有其他一些实现例如ConcurrentLinkedDeque和LinkedBlockingDeque以及大量的Queue实现例如DelayQueueLinkedBlockingDeque和PriorityQueue。 由于这些功能较为专业而且我使用的并不多因此我不再赘述。 ArrayDeque 从javadocs开始 ArrayDeque是Deque接口的可调整大小的数组实现。 除remove *contains *和bulk操作外大多数ArrayDeque操作均以摊销的固定时间运行即“偶尔”但平均为常数所有操作均以线性时间运行。 文档指出此类用作堆栈时可能比Stack快而用作队列时则比LinkedList快。 这条语句使我使用ArrayDeque作为堆栈和队列的默认实现。 链表 LinkedList类实现ListQueue和Deque接口。 除了实现List接口之外LinkedList类还提供统一命名的方法以获取删除和在列表的开头和结尾插入元素。 这些操作允许将链接列表用作堆栈队列或双端队列。 LinkedList与ArrayDeque 因此何时使用ArrayDeque上的LinkedList LinkedList实现的优点是 比ArrayDeque实现更灵活因为它 实现所有可选的列表操作。 非常适合需要频繁删除/插入列表中间的项目某些情况可能会导致ArrayDeque的大型数组副本。 LinkedList实现的缺点 一般而言在迭代项目时并不理想 比ArrayDeque实现消耗更多的内存 总体 在效率方面ArrayDeque比LinkedList在两端进行迭代和添加/删除操作效率更高。 因此正如javadocs所指出的那样通常在用作堆栈时ArrayDeque可能比堆栈快而当用作队列时则比LinkedList快。 参考来自Shaun Abram博客博客的JCG合作伙伴 Shaun Abram的Java堆栈和队列 。 翻译自: https://www.javacodegeeks.com/2013/10/stacks-and-queues-in-java.htmljava 队列和堆栈