gpt4 book ai didi

java - ArrayDeque 和 LinkedBlockingDeque

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:28:42 25 4
gpt4 key购买 nike

只是想知道为什么他们制作了一个 LinkedBlockingDeque 而相同的非并发对应物是一个 ArrayDeque,它支持一个可调整大小的数组。

LinkedBlockingQueue 使用一组节点,如 LinkedList(即使未实现 List)。

我知道可以使用 ArrayBlockingQueue,但如果想使用 ArrayBlockingDeque 怎么办? 为什么没有这样的选项?

提前致谢。

最佳答案

对于 stackoverflow,这可能不是一个合适的问题。但我想谈谈这些实现。

-> 首先我们需要回答为什么我们对某个接口(interface)给出不同的实现。 假设我们有一个接口(interface) A 并且有两个实现让我们说 B 和 C。 现在假设这些实现通过它们的实现提供相同的功能。 但是B比C有更好的表现。 然后我们应该删除实现,除了两个原因

1. Backward Compatibility - marking as deprecated.
2. There is a specific scenario where we cannot use B implementation.

例如:

HashMap 和 LinkedHashMap ->如果我需要有序的键,我将使用 LinkedHashMap,否则我将使用 HashMap(以获得一点性能提升)。

ArrayBlockingQueue 与 LinkedBlockingQueue 如果我需要有界队列,我将使用 ArrayBlockingQueue,否则我将使用 LinkedBlockingQueue。

现在你的问题为什么没有ArrayBlockingDeque而LinkedBlockingDeque存在

首先让我们看看为什么存在ArrayDeque。

来自 ArrayDeque 的 Java 文档。

  • 这门课可能比
  • {@link Stack} 当用作堆栈时,比 {@link LinkedList} 更快
  • 用作队列时。

    另请注意,ArrayDeque 没有容量限制。它还具有用于 LinkedList 实现中的头部和尾部的两个指针。

因此如果有ArrayBlockingDeque

1. There would have been no Capacity Restriction, which we normally 
get from ArrayBlockingQueue.

2. There would have guards to access to tail and head pointers
same as in LinkedBlockingDeque and therefore no significant performance
gain over LinkedBlockingDeque.

因此可以得出结论,没有 ArrayBlockingDeque 实现,因为什么都没有此实现可以提供额外的 LinkedBlockingDeque。如果你能证明有然后是的,实现需要在那里:)

关于java - ArrayDeque 和 LinkedBlockingDeque,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17674931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com