Gau*_*rav 9 java stack arraydeque
根据javadoc,
当用作堆栈时,ArrayDeque类可能比Stack快
我不明白ArrayDeque怎么能比堆栈更快.假设使用链表实现堆栈,如下所示:
Push: Insert new element at the head, teamp->next = head; head = temp
(where temp is the element to be inserted)
Pop: Remove the element from head, and make head = head->next
Run Code Online (Sandbox Code Playgroud)
对于大量元素,ArrayDeque将有一个调整大小的开销,这在使用LinkedList实现的Stack中不是这种情况.那么ArrayDeque究竟比堆栈更快呢?
Ste*_*e C 12
ArrayDeque是Java Collections Framework的一部分,并不是为了本质上是线程安全的.
Stack,与Vector和Hashtable一起使用Java 1.0,并使用线程安全操作实现(因为它当时似乎是一个好主意).获取和释放线程锁是时间相对昂贵的,因此这些数据结构将比它们在JCF中的同胞慢得多.
因为大多数操作不需要数组调整大小,特别是一旦队列达到稳定大小并且不再增长.
每次添加项目Stack都必须分配新对象更新链接等.
ArrayDeque 只需要在数组中放置一个对象并更新索引.