gpt4 book ai didi

data-structures - 来自现有集合与迭代的 Java ArrayDeque 实例化

转载 作者:行者123 更新时间:2023-11-29 08:31:36 25 4
gpt4 key购买 nike

我正在尝试评估两个创建 ArrayDeque与现有集合..我看到两个选项:

  1. 使用 ArrayDeque 的 constructor接受现有的集合
  2. 遍历集合并在遍历集合时调用 dequeu.offer(element)

根据我的基准测试,我发现第一个选项比第二个选项运行得更快。第一个选项比第二个选项更好的原因是什么?

最佳答案

第一个选项。

public ArrayDeque(Collection<? extends E> c) {
allocateElements(c.size());
addAll(c);
}

它在一次调用中分配所有元素(也就是说,它分配一个具有足够元素的数组),然后将它们一个接一个地添加(没有任何额外的分配)。

但是当您使用选项 2 时,当 ArrayDeque 增长(自身加倍)时,在此过程中会发生多次分配;再加上每次重新分配时,元素都会被复制到新数组中。

只有一次分配(对于选项 1)与多次分配加上复制(对于选项 2)给出了区别。

供引用:

public boolean offerLast(E e) {
addLast(e);
return true;
}

public void addLast(E e) {
if (e == null)
throw new NullPointerException();
elements[tail] = e;
if ( (tail = (tail + 1) & (elements.length - 1)) == head)
doubleCapacity();
}

所有代码均来自 Java 8。

关于data-structures - 来自现有集合与迭代的 Java ArrayDeque 实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47660667/

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